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
No comments:
Post a Comment