Wednesday, 30 April 2014

Орос хэлний хичээл - Харьяалахын тийн ялгал

Энэ бүлгээс өгөх оршихийн тийн ялгалын
  • Нэр үгийн хувирал
  • Төлөөний үгийн хувирал
  • Тэмдэг нэрийн хувирал
  • Хамт хэрэглэгддэг угтварууд
  • Өгөх оршихийн тийн ялгалыг шаарддаг үйл үгсийн тухай тус тус сурах болно.
***Грамматика
Харьяалахын тийн ялгалаар хувирсан үг нь өгүүлбэрт дангаараа тодотголын үүргээр орж, -кого/хэний? -чего/юуны? гэсэн асуултад хариулагдана. Харьяалахын тийн ялгалын -ого/-его төгсгөлийн -г үсгийг -в авиагаар дууддаг.
Эр болон саармаг үг нь -а/-я төгсгөл залгагдана.
Эм үг нь -ы/-и төгсгөл залгагдана.
!-а/-я-аар төгссөн эр үг нь эм үгтэй адил хувирна.
!зарим дүрмийн бус аргаар хувирдаг үгнүүд байдаг.
Жишээ:
Эр үг: Олег - Олега, Сергей - Сергея, Игорь - Игоря папа - папы, Миша - Миши
Саармаг үг: небо - неба, море - моря, время - времени
Эм үг: Лена - Лены, Таня - Тани, осень - осени, мать - матери, дочь - дочери
 
***Төлөөний үгийн хувирал
Я - меня                              Мы - нас
Ты - тебя                            Вы - вас
Он/она - его/её                   Они - их
!3дугаар биеийн төлөөний үг нь угтварын ард орох үед урд нь -н залгаж бичнэ.
Жишээ: у него/ у неё/ у них
! Ялгааг нь анхааралтай хараарай.
У неё нет сестры. - Тэрэнд эгч байхгүй.
У её брата нет подруга. - Түүний ахад найз охин байхгүй.
 
***Тэмдэг нэрийн хувирал
Тэмдэг нэр нь тодотгож буй нэр үгнийхээ тоо, хүйс, тийн ялгалаас хамаарч өөр өөр төгсгөл авна. Тодотгож буй үг нь
Эр болон саармаг үг бол : ый/ой-р төгссөн тэмдэг нэр нь -ого, ий-р төгссөн тэмдэг нэр нь -его
Эм үг бол : ый/ой-р төгссөн тэмдэг нэр нь -ой, ий-р төгссөн тэмдэг нэр нь -ей
Олон тоон дээрх үг бол : ый-р төгссөн тэмдэг нэр нь -ых, ий/ой-р төгссөн тэмдэг нэр нь -их
тус тус төгсгөлүүд залгагдана.
 
***Хамт хэрэглэгддэг угтварууд
без чего - юугүй/ямар нэгэн юмгүйгээр
для кого/чего - хэний юуны төлөө
до чего - хаа хүртэл мөн юунаас өмнө
из чего - хаанаас /гарал үүсэл болон харьяалалыг илтгэнэ/
из-за кого/чего - тэрнээс болж
от кого - хаанаас /эхлэлийн цэг нь хүн байх үед/
с чего - хаанаас /эхлэлийн цэг нь газар орон байх үед/
от чего до чего - хаанаас хаа хүртэл
с чего до чего - хэзээнээс хэзээ хүртэл
после чего - юуны дараа
у кого - хэнд /есть үйл үгтэй хамт хэнд юу байгааг илтгэнэ/
 
Жишээ:
кофе без сахара
Папа работает для вас.
Откуда вы-Та хаанахых вэ? Я из Монголии/из Москвы/из Кореи.
Я одоздал из-за дождя. Бороо ороод хоцорчлоо.
Я иду с работы/с почты.
Я иду от Юры.
от Сеула до Улаанбатора 3 часа на самалёте - Сөүлээс Улаанбаатар хүртэл онгоцоор 3 цаг явдаг.
Он работает с утра до вечера.
Максим палавает до завтрака. Максим өглөөний цайгаа уухаас өмнө усанд сэлдэг.
После школы он играет в теннис. Тэр сургуулиа тараад теннис тоглодог.
  
***Хамт хэрэглэгддэг үйл үгс
у кого болеть что - хэний юу нь өвдөж байгаа
бояться кого/чего - хэнээс/юунаас айх
у кого есть что - хэнд ямар нэгэн юм байх
желать кому чего - хэн нэгэнд юуг хүсэх
состоять из кого-чего - хэнээс/юунаас бүтсэн
Жишээ:
У меня болят зубы. - Миний шүднүүд өвдөж байна.
Я боюсь собаки.
Желаю вам здоровья и счастья.
!ихэнхдээ желать кому-г хасч хэлдэг
Спокойной ночи. Приятного аппетита - Сайхан хооллоорой.
 
***Хэрэглээ
  1. 12, 13, 14-өөс бусад 2,3,4-өөр төгссөн тооны ард заах болон нэрлэхийн тийн ялгалын оронд ганц тоон дээрх харьяалахын тийн ялгалаар хувирсан нэр үгийг хэрэглэнэ.  
  2. Юмсыг харьцуулахад хэрэглэнэ.
  3. Өглөө, өдөр, оройн тэдэн цаг гэж хэлэхэд утро, день, вечер, ночь-ыг харьяалахийн тийн ялгалаар хувилгана. утро-утра, день-дня, вечер-вечера, ночь-ночи
  4. Сар өдрийг хэлэхдээ сарыг харьяалахийн тийн ялгалаар хувилгана.
  5. кого нет сейчас - Хэн нэгэн одоо алга байна  
Жишээ:
два карандаша, три ручки, четыре письма
Мой брат старше меня на два года.
У кого есть зеркало? У Любы.
Сейчас семь часов вечера.
Какое сегодня число? Сегодня тридцатое мая.
Олега сейчас нет на месте.


Tuesday, 29 April 2014

Http protocol

HTTP (HyperText Transfer Protocol) нь WWW (World Wide Web)-ээр HyperText өгч авалцах хэлэлцээр(протокол) юм. Энэ нь хэрэглэгч-серверийн(client-server) хооронд хүсэлт-хариу(request-response) явуулах замаар явагдана. Хэрэглэгч (жишээ нь: web browser) сервер (жишээ нь: web site) лүү http хүсэлт явуулна. Сервер нь аль нэг хост компьютер дээр ажиллаж буй аппликейшн бөгөөд хэрэглэгчээс ирсэн хүсэлтийн дагуу хэрэглэгчийг хүссэн resource(html файл) -оор хангаж өгнө.
Http хүсэлт/Http request
Хэрэглэгчийн сервер лүү явуулах хүсэлт нь дараах бүтэцтэй байна.
  • Request line : http комманд, хүсч буй resource-ийн URI, http version. Жишээ: GET  /index.html  HTTP/1.0
  • Header : хүлээн авах контентийн формат. Жишээ:
  • User-Agent: Mozilla/2.03Gold(WinNT:  I)
    Accept :  text/html,   img/gif
  • Empty : header-ын төгсгөлийг илтгэнэ.
  • Message body : нэмэлт контент
Http хариу/Http response
Серверээс хэрэглэгчид өгөх хариу нь дараах бүтэцтэй байна.
  • Status line : http version, хариу код болон түүний тайлбар. Жишээ: HTTP/1.0   200   OK  /амжиллтай болсныг илтгэнэ/
  • Header : сервер болон явуулсан контентийн мэдээлэл. Жишээ:
  • Date:Tue, 28 Mar 2000 06:18:26  GMT
    Server: Apache/1.3.9 (unix)  tomcat/1.0  PHP/3.0.12
    Last-Modified: Tue, 21  Sep 1999  02:35:00 GMT

  • Empty : header-ын төгсгөлийг илтгэнэ.
  • Message body : нэмэлт контент

Http комманд/Http method
Сервер нь хэрэглэгчийг өөрийх нь илгээсэн URI (unified resource indentifier)/URL(unified resource locator) дээр байгаа resource-оор хангах мөн тухайн resource руу чиглэсэн хэрэглэгчийн өгсөн коммандыг гүйцэтгэж гарсан үр дүн хэрэглэгч рүү явуулдаг. Http хэлэлцээрт тодорхойлсон гол коммандууд нь
  • Get : тухайн uri дахь resource-ыг үзүүлэх
  • Post :шинэ resource үүсгэх
  • Put :тухайн uri дахь resource-ыг засах
  • Delete :тухайн uri дахь resource-ыг устгах
Http 1.0 болон  Http 1.1 хоёрын ялгаа
Http-ийн онцлог нь хүсэлт явуулаад хариуг хүлээн авмагц сокет холбоогоо тасалдаг. Энэ тогтолцоог дараах зурган дээр тайлбарлав.
Хэрвээ дотроо зурган файл агуулсан баримтыг хүлээн авах бол эхлээд баримтыг хүлээн авахын тулд нэг холболт үүсгээд баримтыг хүлээн авмагцаа холболтоо таслана. Дараа нь зурган файлыг хүлээн авахын тулд холболт үүсгэнэ. Доорх зургийг харна уу.


Харин Http1.1 нь иймэрхүү олон контенттой баримтыг хүлээн авахдаа ганц удаагийн холболт хийж тэр нь бүх контентыг ээлж дараалан хүлээн автал холбоотой байдаг. Доорх зургийг харна уу.

Http-ийн энэ онцлогоос болж http сервер нь өмнө нь холбогдсон хэрэглэгч шинээр холбогдож байгаа хэрэглэгч хоёроо ялгах боломжгүй байдаг. Үүнийг шийдвэрлэхийн тулд
  • Session
  • Cookie
  • Hidden from field
  • URL rewriting
гэх мэт аргууд бий.
Ашигласан линкүүд
англи хэл дээр : http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
солонгос хэл дээр: http://darkmirr.egloos.com/viewer/1237288, http://truth.yust.edu/kss/jsp/jsp1-7.htm

Орос хэлний хичээл - Өгөх оршихын тийн ялгал

Энэ бүлгээс сурах зүйлс: Өгөх оршихын тийн ялгалын
  • Нэр үгийн хувирал
  • Төлөөний үгийн хувирал
  • Тэмдэг нэрийн хувирал
  • Хамт хэрэглэгддэг угтварууд
  • Өгөх оршихын тийн ялгалыг шаарддаг үйл үгс
***Грамматика
Өгөх оршихын тийн ялгалаар хувилсан үг нь өгүүлбэрт шууд бус тусагдахууны үүрэг гүйцэтгэж, -кому/хэнд? -чему/юунд? гэсэн асуултад хариулагдана.
Эр болон саармаг үг нь -у/-ю төгсгөл залгагдана.
Эм үг нь төгсгөл залгагдана.
!-а/-я-аар төгссөн эр үг нь эм үгтэй адил хувирна.
!-ь-ээр төгссөн эм үг нь -и төгсгөл залгагдана.
!-ия-аар төгссөн эм үгийн төгсгөл -ии болж хувирна.
Жишээ:
Эр үг: Олег-Олегу, Сергей-Сергею, Игорь-Игорю, папа-папе, дядя-дяде, Юра-Юре
Саармаг үг: небо-небу, море-морю
Эм үг: Лена-Лене, Таня-Тане, осень-осени, фамилия-фамилии, Россия-России

***Төлөөний үг
Я  - мне                                        Мы - нам
Ты - тебе                                      Вы - вам
Он/Она - ему/ей                          Они - им
!3дугаар биеийн төлөөний үг нь угтварын ард орох үед урд нь -н залгаж бичнэ.
Жишээ: К нему я ходила в понедельник.
***Тэмдэг нэр
 Тэмдэг нэрийн төгсгөл нь тодотгож байгаа нэр үгнийхээ хүйс, тоо, тийн ялгалаас хамааран хувирдаг. Тодотгож буй үг нь
Эр болон саармаг үг бол : ый/ой-р төгссөн тэмдэг нэр нь -ому, ий-р төгссөн тэмдэг нэр нь -ему
Эм үг бол : ый/ой-р төгссөн тэмдэг нэр нь -ой, ий-р төгссөн тэмдэг нэр нь -ей
Олон тоон дээрх үг бол : ый-р төгссөн тэмдэг нэр нь -ым, ий/ой-р төгссөн тэмдэг нэр нь -им
тус тус төгсгөлүүд залгагдана.

***Хамт хэрэглэгддэг угтварууд
к кому - хэнийд
по чему - хаагуур
! к угтвар нь 1р биеийн төлөөний үгний өмнө орохоороо ко болдог.
Жишээ:
ко мне
Мы идём по берегу реки - Бид голын эргээр явж байна.
Я сейчас еду к дедушке - Би одоо өвөөгийх рүү /унаагаар/ явж байна.

***Хэрэглэдэг үйл үгнүүд
верить/поверить кому/чему - хэнд/юунд итгэх
готовиться/приготовиться к чему - юманд бэлдэх
дарить/подарить кому - хэн нэгэнд бэлэглэх
дать кому чего - хэн нэгэнд юуг өгөх
желать кому чего - хэн нэгэнд юм хүсэх
звонить кому-хэн нэгэн рүү залгах
идти/эхать по чему - хаагуур явах\
идти/эхать к кому - хэнийх рүү явах
кому казаться что/кто - хэн нэгэнд тэгэж санагдах бодогдох /*Жишээн дээр тодорхой тайлбарлая*/
мешать/помешать кому + ХҮҮ - хэн нэгнийг юм хийхэд саад болох
кому надо,нужно/нужен/нужны/нужна + ХҮҮ - хэн нэгэн тэгэх хэрэгтэй байна
кому нравиться - хэн нэгэнд таалагдах
кому + байц/холодно, трудно,интересно .../ - хэн нэгэнд тийм/халуун, хэцүү, сонирхолтой/ байна
помогать/помочь кому + ХҮҮ - хэн нэгэнд юм хийхэд туслах
кому(ҮЭ) пора + ХҮҮ - тэгэх цаг болчихож/ одоо тэгэх ёстой
предлагать/предложить кому что - хэнд юуг санал болгох
путешествовать по чему - хаагуур аялах
разрешать кому + үйл үгийн хувираагүй хэлбэр /цаашид ХҮҮ гэж тэмдэглэе/ - хэн нэгэнд тэгэхийг зөвшөөрөх
рекомандовать кому что - хэнд юуг санал болгох
советовать кому + ХҮҮ - хэн нэгнийг юм хийлгэхээр албадах
учить/научить кого чему - хэнийг юунд сургах
учиться/научиться у кого чему - хэнээс юунд суралцах


***Хэрэглээ
Я веру ему. Я веру его словам.
Сейчас они готовиться к поездке В Россию.
Мама дала брату и сестре деньги.
По воскресеньям я звоню бабушке в деревно. - Бүтэн сайн болгонд би хөдөө эмээ рүүгээ утсаар ярьдаг.
Мне кажется, что Олег хороший друг.
Не мешай мне.
Мне нужно купить новый учебник. / Мне нужен новый учебник.
Я подарила ей хороший учебник русского языка.
Я всегда помогаю папе. Наташа помогает матери мыть фрукты.
Он предлагает ей дружбу, но она пока не отвечает. - Тэр түүнтэй үерхэе гэж гуйж байгаа боловч, бүсгүй одоохондоо хариу хэлээгүй л байна.
Я рекомендую вам посмотреть этот фильм.
Он учит студентов русскому языку.
Раньше я училась у неё русскому языку.
Сколько лет твоему брату? Сколько тебе лет?
Мне холодно. Вам интересно?
У меня сейчас урок по русскому языку.
Желаю вам счастья - Танд аз жаргал хүсье.
Мне пора идти домой - Гэртээ харих цаг болчиж.



Орос хэлний хичээл

Орос хэл
Дунд сургуулийн 5 дугаар ангиас эхлэн 10 төгстлөө орос хэл үзсэн боловч, одоо миний орос хэлний мэдлэг гэж дөнгөн данган мэнд мэдэхээс хэтрэхгүй. Нэг хэсэг хүмүүс орос хэлийг тоохоо больж, англи хэл гэж хошуурч байх үед л би яг орос хэл үзэж дээ. Миний төгсөх жил анх "Ерөнхий шалгалт" авдаг болсон юм. Би тэр үед хичээлээс гадуур англи хэлний дамжаанд сууж, ерөнхий шалгалтаа 5 жил сурсан орос хэлээр биш 6 сар үзсэн англи хэлээр өгч байсан юм.  Ингээд төгсөөд орос хэлийг бүр мартаад байтал дахин орос хэл сурах шаардлага гарч ирлээ. Энэ завшааныг ашиглаад орос хэлийг ядаж дунд түвшинд хүртэл эзэмшчихмээр байна.
Орос хэлний дүрмүүдийг нэлээн эмх цэгцтэй ангилж тайлбарласан солонгос хэл дээрх хичээл оллоо. Эндээс сурсан зүйлсээ цэгцлээд блогтоо тавьж байхаар шийдлээ. Орос хэл анхлан сурах гэж байгаа, нөхөн сэргээж байгаа хүмүүст хэрэг болох байх гэж найдаж байна.

Monday, 28 April 2014

Андройд хөгжүүлэгчийн хөтөч - Inflater, LayoutInflater

Inflater
Inflate гэдэг нь дүүргэх, хийлэх гэсэн утгатай юм байна. Тэгэхээр inflater-ын үүрэг бол layout файл дахь resource-н тодорхойлолтыг ашиглан  програм код дотор View-гийн хувилбарыг (instance) байгуулах юм. Inflater-ыг ашиглахын тулд түүний хувилбарыг шинээр үүсгэх шаардлагагүй, энэ нь аль хэдийн ажиллаж буй context дотор үүсгэгдсэн байдаг. Тиймээс context-оосоо inflater хувилбарыг дуудаж хэрэглэхэд болно.
Гол функц нь:
View inflate(int resource, ViewGroup parent)
resource Тодорхойлолтыг ашиглан View-г байгуулна.
parent нь шинээр байгуулсан view-ын эцэг viewgroup болно.
Эцэст нь анхаарах зүйл гэвэл энэхүү inflater-аар xml файлд урьдчилан тодрхойлсон resource-г л байгуулах боломжтой. Өөрөөр хэлбэл R -ээс дуудаж ирэх боломжтой resource-ыг л байгуулна. Код дотор тодорхойлсон resource-ыг байгуулах боломжгүй юм.
Хэрэглэх жишээ:
Байгуулах view LinearLayout байх үед

 
 



Андройд хөгжүүлэгчийн хөтөч - Fragment

Fragment
Fragment нь активити дахь UI-ын шинж чанар болон хувь(portion)-ийг тодорхойлж өгнө. Фрагмент нь өөрийн гэсэн амьдралын мөчлөгтэй, өөрийн гэсэн оролтын event-тэй активитигийн нэгэн модул юм. Фрагментийг активити ажиллаж байх хооронд активити дээр нэмж бас устгаж болдог. Нэг активити нь хэд хэдэн фрагментийг агуулж болох ба нэг фрагмент нь хэд хэдэн активитид хэрэглэгдэж болно.
Фрагмент нь заавал активити дотор агуулагдах ёстой ба фрагментийн амьдралын мөчлөг нь агуулагдаж байгаа активитигаасаа шууд хамааралтай. Жишээ нь: Активитиг түр зогсооход түүн доторх бүх фрагментууд мөн түр зогсоно. Гэхдээ активити ажиллаж байх хооронд түүн доторх фрагментуудыг нэмж хасч болно. Активити дотор ажилласан бүхий л фрагментууд активити доторх  back stack дотор тэмдэглэгдэж бйдаг. Тэгснээр хэрэглэгч "буцах" товч дарах тоолонд back stack-д тэмдэглэгдсэн фрагментуудыг нэг нэгээр нь анх ажилласны эсрэг дарааллаар ээлжлэн дуудаж ажиллуулж болно. Ингэж фрагментуудыг сольж ажиллуулах үйлдлийг хийхийн тулд FragmentTransaction-ыг ашиглана.
Фрагмент нь активитигийн ViewGroup-ын шатласан бүтцийн нэг хэсэг болон нэмэгдэнэ. Фрагмент нь өөрийн харагдах зохион байгуулалтыг тодорхойлдог. Фрагментыг активитид нэмэхийн тулд дараах хоёр арга байдаг.
  1. Активитигийн layout файлд <fragment> элементийг нэмэх
  2. Програм код дотор ViewGroup-т фрагментыг нэмэх
Активитиг хэдэн хэдэн фрагментуудад хувааснаар активити ажиллах явцад түүний харагдах байдлыг өөрчлөх боломжтой. Жишээ нь: Мэдээ унших активити дээр жишээ авая. Доорх зураг шиг зүүн талд нь мэдээний гарчгуудийг харуулах фрагмент байрлаж, баруун талд нь сонгосон мэдээний дэлгэрэнүйг харуулах фрагмент байрлууллаа Тэгснээр
мэдээнүүдийн гарчгийг харуулах нэг активити, мэдээний дэлгэрэнгүйг унших активити гэж тусдаа активити ажиллуулах хэрэггүй болох юм.

Андройд хөгжүүлэгчийн хөтөч - 3р бүлэг - AdapterView-г ашигласан өгөгдөл холболт

AdapterView-г ашигласан өгөгдөл холболт
AdapterView нь ViewGroup-ын дэд класс юм. Энэ нь layout-д өгөгдлийг дүрслэхэд хэрэглэгдэнэ. AdapterView  классаас уламжлагдан үүссэн дэд классууд нь ямар төрлийн өгөгдлийг ямар аргаар дүрслэхээрээ өөр хоорондоо ялгагдана. Жишээ нь: Gallery, ListView, Spinner гэх мэт. AdapterView  нь хоёр гол үүрэгтэй.
  1. Layout-д өгөгдлийг дүрслэх
  2. Хэрэглэгчийн сонгосон зүйлийг гүйцэтгэх
Өгөгдлөөр layout-г дүүргэх
Layout дээр өгөгдлийг дүрслэх нь AdapterGroup-ыг Adapter-тай холбосноор эхэлнэ. Adapter нь гадны эх үүсвэрээс өгөгдлийг авч ирнэ. Жишээ нь: Програм код доторх list, өгөгдлийн базын query үр дүн гэх мэт
Дараах жишээ код нь
  1. Resource-д тодорхойлогдсон view-г ашиглан Spinner-г үүсгээд
  2. Локал resource дахь өнгөний жагсаалтыг уншиж ирэх ArrayAdapter-г байгуулна.
  3. ArrayAdapter-т тухайн Spinner-ыг холбоно.
 ArrayAdapter
Адабтерууд дундаас хамгийн энгийн нь ArrayAdapter юм. ArrayAdapter нь list object-ыг ListView дээр дүрслэн дэлгэх үүрэгтэй юм. Үүний тулд list object-н нэгж object-ийг ListView-ийн нэгж View оbject руу хувиргана. Өгөгдмөлөөр object-ын toString() функцыг дуудаж, гарсан бичвэрийг TextView дээр дүрслэнэ. Хүсвэл хөгжүүлэгч өөрийн шаардлагад нийцсэн custom ArrayAdapter байгуулан хэрэглэж болно. ArrayAdapter-ыг хэрэглэхийн тулд

  1. Өгөгдлийн эх үүсвэр болсон Array-г зааж өгөх
  2. Нэгж өгөгдлийг хэрхэн ViewObject дээр дүрслэхийг тодрхойлоход болно. getView() функц нь энэ үүргийг гүйцэтгэдэг.
Хэрэглэх жишээ:

Дээрх код нь дараах үйлдлүүдийг гүйцэтгэсэн байна.
  1. ArrayAdapter-ыг байгуулах. Өгөгдлийн эх үүсвэр нь users нэртэй ArrayList бөгөөд

Sunday, 27 April 2014

Андройд хөгжүүлэлт: Eclipse resource cannot be resolved or is not a field

Андройд дээр шинэ resource файл нэмээд түүнийгээ програм код дотроо дуудаж хэрэглэх гэтэл
resource cannot be resolved or is not a field ийм алдаа заагаад шинээр нэмсэн resource-г чинь танихгүй байвал дараах арга хэмжээг аваарай.
  1. Дараах жишээн дээр үзүүлсэн шиг хэлбэртэй R class-ны импорт хэсгийг кодноосоо арилга. Жишээ : import mn.myandoird.test.R;
  2. Project->clean хий.
  3. Дахин R class-аа импорт хий.
Импортлох 2 төрлийн R класс байгааг анхаарна уу. Нэг нь андройд фреймворкийн resource-уудыг агуулсан import android.R; болон нөгөө нь прожектыг хөрвүүлэхэд бидний үүсгэсэн resource-уудыг хөрвүүлж бий болсон R класс Жишээ : import mn.myandoird.test.R;

Андройд хөгжүүлэгчийн хөтөч - 3р бүлэг - Layout-г тунхаглах

Layout-г тунхаглах
/Ихэнх нэр томьёог үнэхээр орчуулж барахгүй юм байна. Орчуулж байна гээд дараа нь өөрийнхөө болон өрөөлийн толгойг эргүүлж байхаар зарим үгсийг орчуулалгүй англиар бичих юмуу криллээр галиглаж бичиж байя./
 
Layout нь активитигийн UI-н бүтэц, загварыг тодорхойлж, хэрэглэгчид харагдах бүхий л элементүүдийг өөртөө агуулж байдаг. Хөгжүүлэгч нь хоёр аргаар layout -г тунхаглах боломжтой.
  1. XML файлд UI-г урьдчилан тодорхойлох
  2. Активити ажиллах явцад(at runtime) layout элементийн хувилбарыг үүсгэх
Хөгжүүлэгч нь энэ хоёр аргыг хоёуланг нь хэрэглэх боломжтой. Жишээ нь: XML файлаар UI урьдчилан тунхагласны дараа аппликейшн ажиллах явцад xml доторх UI object-н төлөвийг өөрчлөгдөхөөр програмчилж болно. 
Андройд фреймворк нь UI-г тунхаглах мөн залуурдах функцуудыг агуулж байдаг.
XML файлд layout-г тодорхойлсноор UI-н загвар бүтэц болон програм код хоёрыг тусгаарлаж өгсөн юм. Ингэснээр програм кодыг өөрчилсөн ч layout-г дахин уншуулж хөрвүүлэх шаардлагагүй мөн UI-н бүтэц нь ойлгомжтой болж байгаа юм. Жишээ нь: мобайл төхөөрөмж болгонд тохирсон эсвэл өөр өөр хэл дээр хэд хэдэн тусдаа layout үүсгэж, аппликейшн уншигдахад тухайн нөхцөлд тохирох layout-г хэрэглэж болох юм.
XML дэх элемент нь ижил нэртэй класстай, attribute нь ижил нэртэй функцтэй байдаг. Ингэж тохирох класс болон функцтэй нь ойролцоо нэр өгсөн нь тухайн элемент, аттрибют нь ямар үүрэгтэй болохыг ялгаж өгөхийг тулд юм.
XML байгуулах
Layout файл нь нэг язгуур элементтэй байх ёстой. Тэр View юм уу ViewGroup юм. Язгуур элементийг тодрхойлсны дараа түүний дотор өөр layout юмуу виджетийг тодорхойлох замаар шатчилсан view бүтцийг байгуулна. Жишээ нь:
 
Ингэж байгуулсан xml файлаа прожект доторх res/layout директорид хадгалаарай.
XML resource-г ачаалах
XML resource нь аппликейшныг хөрвүүлэх үед view resource-руу хөрвүүлэгдэнэ. Activity.onCreate() функц дотор setContentView() функцийг дуудаж, түүний параметрээр view resource-г дамжуулснаар resource ачаалагдана. onCreate() функцыг активити ажиллаж эхлэхэд андройд фреймворк дуудаж ажиллуулдаг юм. Жишээ нь:
Аттрибют - Attribute
View болон ViewGroup object нь өөрийн гэсэн Xml аттрибюттай байдаг. Эдгээр дунд тэдний эцэг view object-с уламжлагдан ирсэн аттрибютууд ч байна.
ID
View object гэх мэт бүхий л элементүүд өөрийгөө таниулах ID аттрибюттэй байх ба аппликейшныг хөрвүүлэх үед энэхүү ID нь бүхэл тоон утга авна. XML файл дотор id аттрибютэд утга өгөх: android:id="@+id/my_btn"
Андройд фреймворкд урьдчилан тодорхойлогдсон id resource-ууд байдаг. Эдгээрийг дуудаж хэрэглэхийн тулд android:id=@android:id/empty үүн шиг андройд гэсэн нэршлийг хэрэглэнэ. Ингэснээр андройд нь тухайн id resource-г прожезт доторх resource class дотор биш android.R class-аас дуудаж авчирна.
View-Г байгуулж, аппликейшнээс түүнийг дуудахдаа дараах үйл явцыг гүйцэтгэнэ.
  1. Layout файл дотор view/widget-г байгуулж, түүнд id утга өгнө.
  2. Програм кодны onCreate() функц дотор тухайн view object-н хувилбарыг байгуулж, тэр хвилбартаа layout-д урьдчилан тодорхойлсон view/widget-г хуваарилаж өгнө.
Layout параметр

Нэр томьёо
програм ажиллах явц - runtime
язгуур - root

Thursday, 24 April 2014

Андройд хөгжүүлэгчийн хөтөч - 3р бүлэг - Хэрэглэгчийн интерфейс

Хэрэглэгчийн интерфейс
  1. Хэрэглэчийн интерфейсийн тухай
  2. Layout - г зарлах
  3. Цэс байгуулах
  4. Диалог байгуулах
  5. UI event-г зохицуулах
  6. Хэрэглэгчид мэдэгдэх
  7. Стайл болон тема хэрэглэх
  8. Өөрийн темаг бий болгох
  9. AdapterViewег ашигласан өгөгдөл холболт
  10. Энгийн layout object
  11. Андройд view-г зурах арга
Хэрэглэгчийн интерфейсийн тухай - UI-н тухай
Аппликейшн дахь хэрэглэгчийн интерфейс гэдэг нь хэрэглэгчид харагдаж байгаа, хэрэглэгчтэй харьцаж байгаа бүх зүйлийг хэлнэ. Хэрэглэгчинй интерфейс нь View болон ViewGroup-ээс object-уудаас үүснэ. Олон төрлийн View болон ViewGroup байх ба эдгээр нь бүгд View болон классын залгамжлагчид юм.
Дэлгэцэнд харагдаж, хэрэглэгчид хариу үйлдэл үзүүлж байдаг товчлуур, бичвэрийн филд зэргээр хангадаг Widget класс нь View-ээс уламжилсан байдаг. Харин дэлгэцний зохион байгуулалтыг тохируулах Layout класс нь ViewGroup-ээс уламжилсан байдаг.
View дотор layout параметрүүд болон компонэнтууд хадгалагдах ба тэдгээр нь тодорхой тэгш өнцөгт талбайг эзлэн байдаг. View нь хэрэглэгчтэй харилцах хэсэг ба тухайн харилцаатай холбоотой event-г хүлээн авагч юм.
View-н шатчилсан бүтэц - View hierarchy
UI нь доорх зураг шиг View болон ViewGroup-үүдийн шатчилсан бүтцээр зохион байгуулагдана.
 
 
Энэхүү шатчилсан бүтцийг дэлгэцэнд харуулж, активититай холбохын тулд автивити дотор setContentView() функцыг дуудаж, шатчилсан бүтцийн оройн цэг (root node) - ийн холбоосыг (reference)-г параметраар дамжуулна. Оройн цэг маань түүний доторх child-уудад өөрсдийгөө дэлгэцэнд дүрслэхийг тушаана. Андройд нь энэ шатчилсан бүтэд дэх View-уудыг оройгоос нь эхлээд дэс дарааллаар судлаж, тэдний хувилбарыг үүсгэж(instance), parent дээр нь нэмж өгнө.
Зохион байгуулалт - Layout
Шатчилсан бүтцийг үүсгэх болон UI-ийг зохион байгуулах хамгийн энгийн арга бол XML зохион файлыг ашиглах юм. Энэхүү xml файлын элементүүд нь View болон ViewGroup-ууд юм. Эдгээрийн шатчилсан бүтцийг салаа модтой зүйрлэвэл View нь модны хамгийн үзүүрийн цэг, ViewGroup нь модны мөчир болно.
Xml файлын элемент бүр тус тусын жава класстай тохирно. Жишээ нь <TextView> элемент нь TextView классыг үүсгэнэ. Андройд систем нь рисус файлыг уншуулах үед, эдгээр элементүүдийн class-уудыг runtime object болгон байгуулна.
% addView(View) функцийг ашиглан View болон ViewGroup-ийг динамикаар байгуулах боломжтой.
Андройд нь View-үүдийн байршил бүтцийг зохион байгуулахын тулд олон төрлийн зохион байгуулалтыг агуулж байдаг.
Виджет - Widget
Виджет нь хэрэглэгчтэй харилцах интерфейсийг агуулж байдаг. Андройд нь checkbox, button, text field зэрэг үндсэн виджетүүдээс гадна data picker, clock, zoom control зэрэг нарийн виджетүүд байгаа. Хэрвээ хүсвэл хөгжүүлэгч өөрт тохирох виджетийг шинээр байгуулах юм уу, хуучин виджедээс уламжлан байгуулж болно.
UI event
UI-д байгуулсан view болон виджетүүдийг хэрэглэгчийн үйлдэлд хариу өгдөг болгох дараах 2 арга байна.
  1. Event listener-г тодорхойлж, view-д бүртгэх. Энэ нь event-д хариу өгөх хамгийн энгийн арга юм. On<Something>Listener хэлбэрийн нэртэй дотроо On<Something> нэртэй функцуудыг агуулсан интерфейсийг тодорхойлж, дараа нь view дотроо бүртгэх хэрэгтэй. Жишээ нь: View-г моус дарах event-д хариу хариу өгөхөөр тохируулахын тул OnClickListener-г байгуулж, OnClick функцыг тодорхойлсны дараа setOnClickListener() функцийг ашиглан view-д бүртгэнэ.
  2. View-д байгаа функцыг дахин тодрхойлох (overriding). Энэ өөрийн гэсэн view-г байгуулж, түүнийгээ event-д хариу үйлдэл үзүүлдэг болгохын тулд хэрэглэх арга юм. Жишээ нь: хуруугаар хүрэхэд хариу өгөхийн тулд onTouchEvent(), товчлуур дарагдах үзд хариу үйлдэл өгөхийн тулд onKeyDown() функцуудыг тодорхойлж болно.
Цэс
Цэс бол андройд UI-н бас нэгэн чухал хэсэг юм. Цэс нь view-тэй адил шатчилсан бүтэцтэй байна. Цэсний бүтцийг зохион байгуулах шаардлагагүй бөгөөд активити дотор onCreateOptionsMenu(), onCreateContextMenu() зэрэг функцуудыг тодорхойлж, цэсэнд оруулмаар байгаа зүйлсээ тунхаглахад л болно. Андройд нь автоматаар цэсний бүтцийг байгуулж, цэсийг дүрслэх болно. Хэрэглэгч цэс доторх зүйлийг сонгоход андройд нь OnOptionsItemSelected() болон onContextItemSelected() функцыг дуудаж өгдөг. Тиймээс цэсэнд event listener-г бүртгэх шаардлагагүй юм. Мөн xml файл дотор цэсний зүйлүүдийг тунхаглаж болно.
Нэмэлт сэдвүүд
Адабтор - Adapter
View-д урьдаас тодорхойлоогүй(not hard-coded) гадны өгөгдлийг харуулах гэж байгаа үед адабтерыг ашиглана. Adabter нь гадны өгөгдлүүдийг агуулж, AdabterView нь эдгээр өгөдлийг ViewGroup болон View-дээр дэлгэж өгнө.
Adapter нь өгөгдлийн эх үүсвэр болон энэ өгөгдлийг дүрслэх AdabterView хоорондын дамжуулах хэрэгсэл болж өгнө. Жишээ нь өгөгдлийн базаас өгөгдлийг авчрах CursorAdapter болон array-с өгөгдлийг авчрах ArrayAdapter зэргийг дурдаж болно.
Стайл болон Тема
Style болон Theme
Хэрвээ андройдын стандарт загвар таалагдахгүй бол өөрийн гэсэн стайл болон темаг үүсгэж болно.
  • Стайл нь layout-н нэгж элемэнтийг тохируулж болох загвар хэлнэ. Жишээ нь: Дурын бичвэрийн хэмжээ, өнгийг тодорхойлоод layout-н тодорхой нэг элементийн загварыг тодорхойлж болно.
  • Тема нь аппликейшны нэгж активитид тохируулж болох загвар юм. Жишээ нь: панелын арын өнгө, цэсний бичвэрийн өнгө болон хэмжээ гэх мэт.
 Андройд нь өгөгдмөл тема болон стайлтай ба хөгжүүлэгч өөрийн гэсэн тема стайлыг тунхаглах боломжтой юм.
...

Андройд хөгжүүүлэгчийн хөтөч - Нэр томьёонуудыг цэгцлэв.

Монголоор
Активити - activity
Виджет - Widget
Дахин тодрхойлох - overriding
Дуудах - 호출 /функцыг дуудаж ажиллуулах/
Зохион байгуулалт - Layout
Компонэнт - component
Контентоор хангагч

Манифест файл - manifest file
өгөгдөл холболт - data binding
Процесс - process
Рисус - resource
Тунхаглах - declaration - 선언
Үйлчилгээ - service
Хувилбар - instance
Англиар
Broadcast хүлээн авагч
java object
Thread
UI - user interface

Андройд хөгжүүлэгчийн хөтөч - 2р бүлэг - Процесс болон thread


Процесс болон thread
Аппликейшны эхний компонэнт ажиллах болоход андройд нь нэг thread-тэй линукс процессыг ажиллуулдаг. Програм хөгжүүлэгч нь компонэнтыг өөр процесс дотор ажиллуулахаар юм уу процесс дотор нэмэлт thread үүсгэхээр тохируулах боломжтой юм.
Процесс
Компонэнтыг ямар процесс дотор ажиллах вэ гэдгийг манифест файлд тохируулж өгнө. Манифест файл дахь <activity>, <service>, <receiver>, <provider> гэсэн 4 компонэнтийн элемент тус бүр <process> гэсэн attribute. Энэ attribute-ыг ашиглан компонэнт бүр тус тусын процесс дотор ажиллахаар тохируулах юмуу тодорхой хэдэн компонэнтыг бусад компонэнтуудаасаа тусдаа процесс дотор ажиллаж байхаар тохируулж болно. Эсвэл компонэнт дотор өөр аппликейшны компонэнтыг ажиллуулахаар ч тохируулж болох юм. Үүний тулд тухайн хоёр аппликейшн нэг хэрэглэгчийн id - тай нэг cертификаттай байх ёстой. Манифест файлын <application> элемент ч мөн <process> гэсэн attribute-тай байх ба энд тухайн аппликейшны бүх компонэнтын ажиллах процессын өгөгдмөл утгыг тодорхойлж өгдөг.
Бүх компонэнтууд нь тухайн процессын гол thread дотор үүснэ(instance). Тиймээс компонэнт нь их хугацаа шаардагдах үйлдэл хийх юмуу blocking хийвэл бусад компонэнтуудын ажиллагаанд саад учруулна. Тиймээс  их хугацаа шаардагдах үйлдэлд зориулж шинэ thread үүсгэж болно.
Андройд нь багтаамж хүрэлцэхээ болих юмуу хэрэглэгчийн яг одоо ажиллаж байгаа процесст илүү багтаамж шаардлагатай үед ард талд (background) идэвхгүй хэлбэрээр байгаа активититэй процессуудаас эхлэн унтрааж болно. Тэгвэл тэр процесс дотор ажиллаж байгаа бүх компонэнт устгагдана.
Thread
Аппликейшнд ганц процесс олгогдох боловч тэр дотроо олон thread үүсгэх боломжтой байдаг. Хэрэглэгчийн идэвхтэй ажиллуулж интерфейс нь хэрэглэгчийн үйлдэлд түргэн шуурхай хариу үйлдэл үзүүлж байх ёстой учраас, удаан хугацаа шаардагдах /интернэтээс файл татах гэх мэт/үйлдлүүдийг шинэ thread үүсгэж, тэр дотор ажиллуулах хэрэгтэй.
Thread нь жавагийн Thread object - оос үүснэ. Андройдод thread-ийг залах хэд хэдэн классууд байгаа.
  • Looper
  • Handler
  • HandlerThread

Tuesday, 22 April 2014

Mysql өгөгдлийн баз /database backup хийх арга болон өөр серверт хадгалах

/Энд a_host_name - ээс b_host_name рүү тодорхой нэг өгөгдлийн баазыг шилжүүлэн хадгалах үйлдлийг харууллаа./

Mysql тодорхой нэг өгөгдлийн базаа backup хийсний дараа өөр серверт шилжүүлэн хадгалахын тулд хэд хэдэн арга байна. Үүний тухай дэлгэрэнгүй мэдээллийг http://dev.mysql.com/doc/refman/5.0/en/copying-databases.html уншиж болно.

1. Шинэ сервертээ өгөгдлийн базаа байгуулна.
 shell> mysqladmin -u root_name create db_name -p
2. Local хадгалах ойд өгөгдлийн базаа хадгалана.
shell> mysqldump - u root_name -p - h a_host_name db_name > D:dbname.slq
3. Local backup хийсэн өгөгдлийн базаа шинэ сервертээ хадгална.
shell> mysql -u root_name -h b_host_name DBNAME -p < D:dbname.sql

Харин 3 дахь үйлдлийг хийхэд дараах алдаа заав.
ERROR 1449: the user specified as a definer does not exist
Үүнийг mysql client command line -д доорх коммандыг ажиллуулж арилгалаа.
mysql> grant all on *.* to 'root'@'%' identified by 'password' with grant option;
Үүний тухай дэлгэрэнгүйг энэ линкээс уншаарай. http://stackoverflow.com/questions/10169960/mysql-error-1449-the-user-specified-as-a-definer-does-not-exist

Monday, 21 April 2014

Андройд хөгжүүлэгчийн хөтөч - 2р бүлэг - Аппликейшны тухай?

2. Аппликейшны тухай
 2.1 Аппликейшн компонэнт
 2.2 Активити болон таск
 2.3 Процесс болон thread
 2.4 Компонэнтын амьдралын мөчлөг

Аппликейшны тухай
Андройд аппликейшн нь жава програмын хэл дээр бичигдэх ба бүх жава програм кодууд мөн аппликейшнд хэрэглэгдэх өгөгдлүүд болон бүх resource файлуудыг aapt utility - ээр багцлан .apk тодотголтой нэг архив файл бий болгодог. Энэ архив файл нь андройд төхөөрөмжид суулгах нэг аппликейшн юм.
  • Өгөгдмөл тохиргоогоор аппликейшн нь өөрийн гэсэн линукс процесс дотор ажиллана.
  • Процесс болгон өөрийн гэсэн жава virtual machine-тай.
  • Өгөгдмөл тохиргоогоор аппликейшн болгон тусдаа хэрэглэгчийн id-тай ба тухайн аппликейшны хувийн файлыг тухайн хэрэглэгч болон аппликейшн нь харах боломжтой. Хэрэв 2 өөр аппликейшн нэг хэрэглэгчийн id-тай байхаар тохируулагдсан бол тэр 2 аппликейшн нь өөр хоорондоо хувийн файлуудаа хуваалцах боломжтой ба нэг линукс процесс дотор ажиллаж, нэг жава virtual machine-ыг ашиглана.

Аппликейшн компонэнт
Андройдод нэг аппликейшн өөр нэг аппликейшны бусдад хэрэглүүлэхээр зөвшөөрсөн ямар нэг чадварыг ашиглах боломжтой байдаг.Үүний тулд нөгөө аппликейшныхаа кодыг өөртөө агуулах юмуу түүнтэй холбох ямар нэгэн холбоосны шаардлагагүй. Зөвхөн хэрэгтэй үед нөгөө аппликейшны тухайн ашиглах гэж байгаа хэсгээ ажиллуулахад л болох юм. Үүний тулд систем нь нөгөө аппликейшны процессыг ажиллуулаад ашиглах хэсгийн жава object-ын instance-ыг бий болгоно. Андройд аппликейшны бусад системүүдээс ялгарах онцлог шинж нь нийт аппликейшны хувьд ганц эхлэх цэг буюу main class гэж байдаггүй юм. Оронд нь андройд аппликейшн нь хэрэгтэй үед жава object-ын instance-ыг бий болгон ашиглах боломжтой компонэнтуудаас бүтдэг юм. Дөрвөн төрлийн компонэнт байдаг.
1. Активити - Activity
Активити гэж хэрэглэгчид харагдах интерфейсыг үүсгэн хэрэглэгчийн анхаарал дор ажилладаг компонент юм. Нэг аппликейшн нь түүний бүтцээс хамаарч нэг болон түүнээс дээш хэдэн ч активитигаас бүтэж болно. Жишээ нь: Зурвас бичих аппликейшн нь хуучин зурвасуудын архивыг харуулах активити, зурвас явуулах утасны дугаарыг сонгох утасны жагсаалт харуулах активити, сонгосон дугаар луу зурвасыг бичих активитинуудаас бүрдэж болно. Бүх активити нь Activity class-ын дэд class юм.
Активити болгон өгөгдмөл window-той байна. Энэ window нь шатласан бүтэцтэй олон view-ээс бүтнэ. View болгонд window доторх нэг хэсэг тэгш өнцөгт талбай ноогдох ба тухайн хэсэгт хийгдэх хэрэглэгчийн үйлдлийг хариуцна. Жишээ: button, text box, scroll bar, check box гэх мэт.
View шатласан бүтэц нь Activity.setContentView() гэсэн method-оор активити дэх window-д байршина.
2. Үйлчилгээ - Service
Үйлчилгээ нь харагдах интерфейс гэж байхгүй ба хэрэглэгч өөр юм хийх зуур ар талд ажиллаж байдаг. Жишээ нь: дуу тоглуулах ч юмуу, интернэтээс файл татах гэх мэт.
Үйлчилгээ нь Service class-ыг extend хийх ёстой.
Үйлчилгээний интерфэйстэй холбогдон тухайн үйлчилгэйтэй харилцах боломжтой юм. Жишээ нь  : тоглогдож буй дууг түр зогсоох, дахин ажиллуулах гэх мэт.
3. Broadcast receiver - Broadcats хүлээн авагч
Систем код болон аппликейшнээс ирсэн мэдэгдлийг хүлээн авч түүнд хариу өгөх үүрэгтэй компонэнт юм.
    Систем кодоос ирэх мэдэгдэл: батерей дутаж байна, зураг дарагдлаа гэх мэт.
    Аппликейшнээс ирэх мэдэгдэл: файл татаж дууслаа гэх мэт.
Аппликейшн нь чухал гэж бодсон мэдэгдэлд хариу өгөх зорилготой хэдэн ч broadcast receiver-тэй байж болно. Broadcast receiver нь Receiver class-ыг extend хийх ёстой. Broadcast receiver нь хэрэглэгчийн интерфэйс гэж байхгүй ба тухайн мэдэгдэлд хариу өгөх активитиг ажиллуулах юм уу notification manager-ыг ашиглан мэдэгдлийг чичиргээ, ая гаргах гэх мэт янз бүрийн аргаар  хэрэглэгчид мэдээлж болно.
4. Контентоор хангагч - Content provider
Бусад аппликейшнуудад хэрэглэгдэх өгөгдлийн олонлогийг бий болгоно. Энэхүү өгөгдлүүд нь файл систем, SQLite өгөгдлийн баз гэх мэт хаа нэгтээ хадгалагдаж байх юм. Аппликейшнт энэ content provider-ыг шууд content resolver-оор дамжуулан ашиглана. Контентоор хангагч нь ContentProvider class-г уламжлан (extend) авснаар өгөгдлийг бусад аппликейшн олж авч хадгалах боломжоор хангаж өгөх функцуудыг байгуулах юм. Гэхдээ аппликейшн нь эдгээр функцуудыг шууд дуудан хэрэглэж чадахгүй ба ContentResolver-оор дамжуулан хэрэглэх боломжтой юм. ContentResolver нь ямар ч контентоор хангагчтай харьцах чадвартай байдаг.
Компонэнтыг идэвхжүүлэх: Интент
Контентоор хангагч нь түүн лүү  ContentResolver хүсэлт явуулах үед идэвхжинэ. Харин үлдсэн гурван төрлийн компонэнт болох активити, үйлчилгээ, broadcast хүлээн авагч нь интент гэх зурвасаар идэвхжинэ. Энэ нь дотроо контент зурвасыг агуулсан интент object юм.
Активити болон үйлчилгээг идэвхжүүлэх интент нь тухайн компонэнтын гүйцэтгэх ажил болон өгөгдөл зэргийг заасан байна. Жишээ нь: Нэг активитид тодорхой текстийг засах үүрэг өгөх
  • Активитийг идэвхжүүлэхийн тулд Context.startActivity() эсвэл Activity.startActivityForResult() гэсэн функцуудад интент параметрыг дамжуулан өгч дуудна. Тухайн интентэд хариу өгөх активити нь getIntent() функцыг ашиглан өөрийг нь идэвхжүүлсэн интентийг олж авна. Нэг активити нь нөгөө активитигаа идэвхжүүлэн ажиллуулна. Хэрвээ ажиллуулсан активитигийн гаргах үр дүнг хүлээн авах шаардлагатай бол startActivityForResult() функцыг дуудаж шинэ активитиг идэвхжүүлэх хэрэгтэй. Жишээ нь: Хэрэглэгчийн сонгосон зургийг хүлээж авах
  • Үйлчилгээг идэвхжүүлэхийн тулд Context.startService() функцад интент object-г параметрээр дамжуулан өгч  дуудна. Систем нь үйлчилгээнд интент object-г onStart()  функцээр  дамжуулна. Мөн ижил замаар Context.bindService() функцад интент object-г параметрээр дамжуулан өгч  идэвхжсэн, идэвхжүүлсэн компонэнт хоорондын үргэлжилсэн холбоог бий болгож болно. Жишээ нь: Ар талд хөгжим тоглуулж буй үйлчилгээг хэрэглэгчээр залуулахын тулд хэрэглэгчийн интерфейсээр хангах шаардлагатай болно. Үүний тулд активити нь Context.bindService() функцыг дуудаж, тухайн үйлчилгээний хөгжим тоглуулах функцуудыг ашиглах боломжтой болно.
  • Context.sendBroadcast(), Context.sendOrderedBroadcast(), Context.sendStickyBroadcast() зэрэг олон төрлийн функцд интентийг дамжуулж, broadcast-г үүсгэж болно. Энэ интентээр дамжин идэвхжих бүх broadcast хүлээн авагчдад onReceive() функцээр интентийг дамжуулна.
Компонэнтыг унтраах
Контэнтээр хангагч болон broadcast хүлээн авагч хоёр нь өөрсдийг нь идэвхжүүлсэн хүсэлтэд хариу өгч байх хугацаандаа л асаалттай байх учраас зориудаар унтраах шаардлагагүй юм. Харин активити болон үйлчилгээ нь удаан хугацааны турш идэвхтэй хэвээрээ байх ба эдгээрийг унтраах тусгай функцууд байдаг.
  • Активити нь finish() функцыг ашиглан өөрийгөө, finishActivity() функцыг ашиглан өөр активитиг унтрааж болно
  • Үйлчилгээн stopSelf() юм уу Context.stopService() функцээр унтрана.
Компонэнтыг хэрэггүй болсон үед нь юм уу хэтэрхий олон компонэнт ажилласнаас болж санах ойн ачааллыг багасгахын тулд систем унтрааж болно.
Manifest файл
Manifest файл нь manifest.xml гэсэн xml файл байх ба аппликейшны package .apk дотор аппликейшны програм код, өгөгдлүүд, resource файлуудтай хамт байдлана. Манифест файлын гол үүрэг нь аппликейшны компонентуудыг зарлах явдал юм. Энд зарлагдаагүй компонэнт нь системд харагдахгүй ба ажиллахгүй гэсэн үг юм. Гэхдээ broadcast хүлээн авагч нь програм дотор Context.registerReceiver() функцээр динамикаар үүсгэгдэж болно.
Жишээ нь:
<?xml version="1.0" encoding="utf-8"?>
<manifest ..."
   <application ... >
        <activity
            android:name="mn.example.projectFragmentActivity"
            android:screenOrientation="landscape"
            android:theme="@style/AppTheme"
            ... >
        </activity>
        ...
    </application>
</manifest>

Интент филтер
Интент нь өөрийн обьект болох компонэнтаа тодорхой зааж өгдөг. Андройд нь манифест файлд зарласан мэдээллийг ашиглан тухайн компонантыг олно. Хэрвээ интент обьект болох компонэнтаа тодорхой зааж өгөөгүй бол түүнд тохирох компонэнтыг олохын тулд манифест файлд зарласан компонэнтын интент филтэр дэх тодорхойлолтыг харьцуулж үзнэ. Интент филтер хэсэгт компонэнт нь өөрийхөө гүйцэтгэх боломжтой интентүүдийг тодорхойлж өгсөн байдаг. Програм код дотор динамикаар үүсгэгдсэн broadcast хүлээн авагчийн интент филтерийг IntentFilter object-ын Instance-ийг үүсгэж тодорхойлно. Жишээ нь:
  ...
 <application
        <activity
            android:name="mn.example.projectFragmentActivity"
            android:screenOrientation="landscape"
            ... >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       ...
    </application>

Активити болон таск
Нэг активити өөр нэг активитигээс ажиллуулах боломжтой. Энэ активити нь өөр аппликейшны активити байж ч болно. Жишээ нь: Хэрэглэгчид тодорхой нэг байршлын газрын зургийг харуулах хэрэгтэй боллоо гэж бодоё. Андройдын map view-д тэр чавдар байдаг тул хөгжүүлэгчийн хийх ажил нь интент object-д хэрэгтэй мэдээллүүдээ хадгалсны дараа энэ интент object-оо startActivity() функцийн параметр болгон дамжуулах явдал юм. Тэгвэл map view нь газрын зургийг харуулах ба хэрэглэгчийг Буцах(Back) товчийг дарахад буцаад эхний активитидаа ирнэ.
Таск нь нэг стак дотор эрэмбэлэгдэж байгаа нэг аппликейшнээс үүдэлтэйгээр үүсч, хэрэглэгчийн үзэж өнгөрсөн активитинуудын бүлэг юм. Энэ стакийн root активити нь хэрэглэгч анх сонгосон аппликейшны гол активити бөгөөд хамгийн дээр байгаа активити нь одоо ажиллаж байгаа активити юм. Нэг активити нь өөр нэг активитиг ажиллуулахад тэр нь стак дээр нэмэгдэж(push), стакийн хамгийн дээд талын активити болно. Харин хэрэглэгч Буцах(Back) товчийг дарах болгонд стакийн хамгийн дээд талын активитигаас эхлэн стакаас устгагдаж(pop), түүний дараагийн активити  стакийн хамгийн дээд талын активити болно.
Таск дотор нэг ижил активити олон байж болох ба стак нь тэр активитигийн инстанс болгоны тус тусын эхлэлийн цэгтэй байна.
Таск дотор байгаа бүх активитинууд нь хамт шилжинэ. Таскийг тэр чигт нь арагшаа шилжүүлэх юмуу, урагш дуудаж авчирж болно.
Дээрх ажиллах дараалал нь активити болон таскны өгөгдмөл тохиргоо бөгөөд манифест доторх активитигийн тодорхойлолтод эсвэл активитиг ажиллуулах интент object-д flag утгаар тохируулж өгч болно. Интент object-ын гол flag-ууд нь:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP

Контентоор хангагч - Content provider

Аппликейшн компонэнт - Application component
Активити - Activity
Tаск - Task
Процесс - Process
Компонэнтын амьдралын мөчлөг - Component lifecycle
Үйлчилгээ - Service

Андройд хөгжүүлэгчийн хөтөч - 1р бүлэг - Андройд гэж юу вэ?

Гарчиг
1. Андройд гэж юу вэ?
 1.1 Гол онцлог
 1.2 Андройдын бүтэц
 1.3 Application
 1.4 Application framework
 1.5 Library
 1.6 Андройд runtime
 1.7 Линукс кернел

Андройд гэж юу вэ?
 
Андойд нь үйлдлийн систем, суурь холбогч програм хангамж болон гол аппликешнуудыг агуулж байдаг мобайл төхөөрөмжид зориулагдсан програм хангамжийн стак (software stack) юм. Андройд SDK (Android SDK) нь аппликешныг хөгжүүлэхэд хэрэглэгдэх жава програмын хэл (java programming language) дээр бичигдсэн хэрэгслүүд болон API-уудыг агуулж байдаг.
 
үйлдлийн систем (operating system) - (Үйлдлийн системийг wikipedia дээр монголоор их сайхан тайлбарласан байна. ) Компьютерын ажиллагааг програм хангасж болон техник хангамж гэж ангилна. Техник хангамж нь компьютерын санах ой, CPU зэрэг эд ангиуд юм. Харин програм хангамж дотроо үйлдлийн систем болон энгийн хэрэглээний програмууд гэж хуваагдана.Үйлдлийн систем нь компьютер дэх техник хангамжуудыг удирддаг програмуудын цогц юм. Мөн техник хангамжууд болон хэрэглээний програмуудыг холбогч болж, хэрэглээний програмуудад шаардлагатай үйлчилгээнүүдийг үзүүлж байдаг. Энд бидний хамгийн өргөн хэрэглэдэг үйлдлийн систем болох Microsoft компаний Windows - н цувралуудыг дурдаж болно.
суурь холбогч програм (middleware) - Хэрэглээний програмуудад (software application) хэрэгтэй үйлчилгээг үзүүлдэг компьютер програм хангамж юм.
програм хангамжийн стак (software stack)
 
 
 
Application 
Андройд нь contact, message, map зэрэг хэд хэдэн гол аппликейшн-уудыг агуулж байдаг. Эдгээр аппликешнууд нь жава хэл дээр бичигдсэн.
 
Application framework
Application болгон framework API-ийг ашиглах ба андройд application-ууд өөр хоорондоо өөрсдийн чадварыг солилцох боломжтойгоор бүтэцлэгдсэн юм. Application-ууд дараах үйлчилгээ болон системийн олонлогуудыг агуулж байдаг.
1. View систем
Grid, button, text box гэх мэт
2. Контентоор хангагч (Content provider)
Аппликешнууд өөр хоорондоо өгөгдлөө хуваалцах боломжоор хангаж өгнө.
3. Resource хариуцагч (Resource manager)
String, layout файл гэх мэт non-code resource-д хандаж ашиглах боломжоор хангана.
4. Анхааруулга хариуцагч (Notification manager)
Аппликешныг төлөвийн самбарт анхааруулга зурвас гаргах боломжоор хангана
5. Активити хариуцагч (Activity manager)
Аппликешны амьдралын мөчлөг болон хэрэглэгчийн хэрэглэсэн аппликешнуудын замналыг хариуцна.
 
Libraries
Андройд нь систем компонентад ашиглагддаг C/C++ library-уудыг агуулж байдаг. Андройд хөгжүүлэгч нь framework API-аар дамжуулан эдгээр library-уудыг ашиглаж байдаг.  Гол library-уудыг дор жагсаав.  
System library - Linux-ын техниз хангамжид зориулсан C system library.
Media library - Бүх төрлийн зураг, дуу болон бичлэгэн файлуудыг тоглуулах болон бичих
LibWebCore - Веб хөтөч энжин
SQLite - Relational өгөгдлийн базын энжин
 
Андройд runtime
Андройд  дээр бичигдсэн програмыг ажиллуулахын тулд эхлээд жава compiler-аар жава virtual machine-д зориулагдсан .class файл руу хөрвүүлж, дараа нь андройд SDK-д байгаа DX гэх хэрэгслээр Dalvik virtual machine-д зориулагсан .dex format руу хувиргана. Ингэж бий болсон .dex файлыг Dalvik virtual machine ажиллууна.
Dalvik virtual machine нь андройд төхөөрөмж дээр аппликешнуудыг ажиллуулах зориулалттай. Dalvik virtual machine нь  register-д суурилсан бөгөөд доод түвшний санах ой хариуцалт болон threading зэрэгтэй хамааралтай чадварууд нь Линуксийн кернелээс шууд хамааралтай.
 
Линукс кернел
Андройдын аюулгүй байдал, санах ой, network болон driver-н хариуцалт зэрэг гол систем үйлчилгээнүүд нь линуксээс хамааралтай юм. Нэг үгээр хэлбэл андройдын дотоод цөм нь линукс кернел гэж хэлж болно.
 

 

Андройд хөгжүүлэгчийн хөтөч - Android Developer's guide /3rd edition/

Ажлын шаардлагаар андройд сурах хэрэгтэй болсон учраас энэхүү е-номыг солонгос хэл дээр татан авч судалж эхэллээ. Номыг уншихдаа бүлэг болгоны ард тэмдэглэл хөтөлж байхаар боллоо. Энэхүү тэмдэглэл байна андройдыг сурч байгаа хэн нэгэн эрхэм болоод надад өөрт маань эргээд хэрэг болж байвал миний одоо ингээд бичиж буй хэрэг бүтэх юм.

android.com -ын developer's guide-с солонгос хэл рүү орчуулсныг монгол хэлээрээ чадан ядан тайлбарлан бичихийг оролдлоо. Ихэнх мэргэжлийн үгсийг англиар нь юмуу галиглаж бичихээс өөр арга алга. Ойлгомжгүй тайлбарласан байвал санаа оноогоо сэтгэгдлээр бичээрэй. Шүүмжлэлийг хүлээж авна.

Гарчиг
1. Андройд гэж юу вэ?
2. Аппликешны тухай
3. Хэрэглэгчийн интерфейс
4. Resource esset
5. Интент болон интент филтер
6. Өгөгдөл хадгалах талбар
7. Контентоор хангагч
8. Аюулгүй байдал болон эрх
9. Андройд манифест файл