Translyatsiya qabul qiluvchilar
Translyatsiya qabul qiluvchisitizimga muntazam foydalanuvchilar oqimidan tashqarida hodisalarni ilovaga yetkazish imkonini beruvchi komponent boʻlib, ilovaga butun tizim boʻylab eshittirish eʼlonlariga javob berishga imkon beradi. Translyatsiya qabul qiluvchilar ilovaning yana bir aniq belgilangan yozuvi bo‘lgani uchun tizim hatto hozirda ishlamayotgan ilovalarga ham eshittirishlarni yetkazib berishi mumkin. Shunday qilib, masalan, ilova foydalanuvchiga yaqinlashib kelayotgan voqea haqida xabar berish uchun bildirishnoma yuborish uchun signalni rejalashtirishi mumkin... va bu signalni ilovaning BroadcastReceiver qurilmasiga yetkazish orqali ilova ishga tushgunga qadar ishlamay qolishi shart emas. signal o'chadi. Ko'pgina eshittirishlar tizimdan kelib chiqadi, masalan, ekran o'chirilganligi, batareya quvvati kamligi yoki rasm olinganligi haqida xabar beruvchi eshittirish. Ilovalar translyatsiyalarni ham boshlashi mumkin, masalan, boshqa ilovalarga ba'zi ma'lumotlar qurilmaga yuklab olingani va ular foydalanishi mumkinligi haqida xabar berish uchun. Translyatsiya qabul qiluvchilar foydalanuvchi interfeysini ko'rsatmasa ham, ular mumkin efir hodisasi sodir bo'lganda foydalanuvchini ogohlantirish uchun holat paneli bildirishnomasini yarating. Odatda, eshittirish qabul qiluvchisi boshqa komponentlar uchun shlyuz bo'lib, juda kam ish hajmini bajarishga mo'ljallangan. Misol uchun, u JobService hodisaga asoslangan ba'zi ishni bajarishni rejalashtirishi mumkin
Kontent provayderlari
Kontent provayderi fayl tizimida, SQLite maʼlumotlar bazasida, internetda yoki ilovangiz kirishi mumkin boʻlgan boshqa doimiy saqlash joyida saqlashingiz mumkin boʻlgan umumiy ilova maʼlumotlar toʻplamini boshqaradi. Kontent provayderi ruxsat bergan bo'lsa, kontent provayderi orqali boshqa ilovalar ma'lumotlarni so'rashi yoki o'zgartirishi mumkin. Misol uchun, Android tizimi foydalanuvchining aloqa ma'lumotlarini boshqaradigan kontent provayderini taqdim etadi. Shunday qilib, tegishli ruxsatlarga ega bo'lgan har qanday ilova kontent provayderiga so'rov yuborishi mumkin, masalan ContactsContract.Data, ma'lum bir shaxs haqida ma'lumotni o'qish va yozish. Kontent provayderini ma'lumotlar bazasidagi abstraktsiya deb o'ylash jozibali, chunki bu umumiy holat uchun juda ko'p API va yordam mavjud. Biroq, ular tizim dizayni nuqtai nazaridan boshqa asosiy maqsadga ega. Tizim uchun kontent provayderi URI sxemasi bilan aniqlangan nomli maʼlumotlar elementlarini nashr qilish uchun ilovaga kirish nuqtasidir. Shunday qilib, ilova o'z ichiga olgan ma'lumotlarni URI nom maydoniga qanday qilib xaritalashni xohlashini hal qilishi mumkin va bu URI'larni boshqa ob'ektlarga beradi, ular o'z navbatida ma'lumotlarga kirish uchun ulardan foydalanishlari mumkin. Ilovani boshqarishda tizimga imkon beradigan bir nechta maxsus narsalar mavjud:
URI belgilash ilovaning ishlayotganligini talab qilmaydi, shuning uchun URIlar oʻz ilovalari oʻchirilgandan keyin ham saqlanib qolishi mumkin. Tizim faqat tegishli URI dan ilova maʼlumotlarini olishi kerak boʻlganda, unga ega boʻlgan ilova hali ham ishlayotganligiga ishonch hosil qilishi kerak.
Ushbu URI'lar muhim nozik taneli xavfsizlik modelini ham ta'minlaydi. Misol uchun, ilova o'zida mavjud bo'lgan tasvir uchun URI ni joylashtirishi mumkin, lekin boshqa ilovalar unga erkin kira olmasligi uchun kontent provayderini qulflangan holda qoldiring. Ikkinchi ilova vaqtinchalik URI ruxsatnomasi orqali ushbu URI ga kirishga harakat qilganda, tizim ushbu ilovaga vaqtinchalik URI ruxsatnomasi orqali maʼlumotlarga kirishga ruxsat berishi mumkin, shunda unga faqat shu URI orqasidagi maʼlumotlarga kirishga ruxsat beriladi, lekin ikkinchi ilovada boshqa hech narsa yoʻq. .
Kontent provayderlari ilovangiz uchun shaxsiy boʻlgan va baham koʻrilmagan maʼlumotlarni oʻqish va yozish uchun ham foydalidir.
Android tizimi dizaynining o'ziga xos jihati shundaki, har qanday ilova boshqa ilova komponentini ishga tushirishi mumkin. Misol uchun, agar siz foydalanuvchi qurilma kamerasi yordamida suratga olishni xohlasangiz, buni amalga oshiradigan boshqa ilova bo'lishi mumkin va sizning ilovangiz o'zingiz suratga olish harakatini ishlab chiqish o'rniga undan foydalanishi mumkin. Kamera ilovasidagi kodni kiritishingiz yoki hatto unga havola qilishingiz shart emas. Buning o'rniga, siz shunchaki suratga oladigan kamera ilovasida faoliyatni boshlashingiz mumkin. Tugallangach, siz undan foydalanishingiz uchun surat hatto ilovangizga qaytariladi. Foydalanuvchiga kamera aslida ilovangizning bir qismidek tuyuladi.
Tizim komponentni ishga tushirganda, u hali ishlamayotgan bo'lsa, ushbu ilova uchun jarayonni boshlaydi va komponent uchun zarur bo'lgan sinflarni yaratadi. Misol uchun, agar ilovangiz suratga oladigan kamera ilovasida faoliyatni boshlasa, u ilovangiz jarayonida emas, balki kamera ilovasiga tegishli jarayonda ishlaydi. Shuning uchun, boshqa tizimlardagi ilovalardan farqli o'laroq, Android ilovalarida bitta kirish nuqtasi yo'q (main() funksiya yo'q).
Tizim har bir ilovani boshqa ilovalarga kirishni cheklovchi fayl ruxsatlari bilan alohida jarayonda ishga tushirganligi sababli, ilovangiz boshqa ilovadan komponentni bevosita faollashtira olmaydi. Biroq, Android tizimi mumkin. Komponentni boshqa ilovada faollashtirish uchun tizimga ma'lum komponentni ishga tushirish niyatingizni bildiruvchi xabar yuboring. Keyin tizim siz uchun komponentni faollashtiradi.
sababli, ilovangiz boshqa ilovadan komponentni bevosita faollashtira olmaydi. Biroq, Android tizimi mumkin. Komponentni boshqa ilovada faollashtirish uchun tizimga ma'lum komponentni ishga tushirish niyatingizni bildiruvchi xabar yuboring. Keyin tizim siz uchun komponentni faollashtiradi.
Komponentlarni faollashtirish
To'rt komponent turidan uchtasi - harakatlar, xizmatlar va eshittirish qabul qiluvchilari - intent deb nomlangan asinxron xabar tomonidan faollashtirilgan. Niyatlar ish vaqtida individual komponentlarni bir-biriga bog'laydi. Siz ularni komponent sizning ilovangizga yoki boshqa komponentlarga tegishli bo'ladimi, boshqa komponentlardan harakat talab qiladigan messenjerlar deb hisoblashingiz mumkin.
Niyat ob'ekt bilan yaratilgan bo'lib Intent, u ma'lum bir komponentni (aniq niyat) yoki muayyan turdagi komponentni (nopiskop niyat) faollashtirish uchun xabarni belgilaydi.
Faoliyatlar va xizmatlar uchun maqsad bajariladigan harakatni (masalan, biror narsani ko'rish yoki yuborish) belgilaydi va ishga tushirilayotgan komponent bilishi kerak bo'lgan boshqa narsalar qatorida harakat qilish uchun ma'lumotlarning URI-ni ko'rsatishi mumkin. Misol uchun, niyat tasvirni ko'rsatish yoki veb-sahifani ochish uchun faoliyat so'rovini etkazishi mumkin. Ba'zi hollarda siz natijani olish uchun faoliyatni boshlashingiz mumkin, bu holda faoliyat natijani ham qaytaradi Intent. Masalan, siz foydalanuvchiga shaxsiy kontaktni tanlashiga va uni sizga qaytarishiga ruxsat berish niyatida bo'lishingiz mumkin. Qaytish maqsadi tanlangan kontaktga ishora qiluvchi URI ni o'z ichiga oladi.
Eshittirish qabul qiluvchilar uchun maqsad shunchaki efirga uzatilayotgan e'lonni belgilaydi. Masalan, qurilmaning batareya quvvati kamligini bildiruvchi eshittirish faqat batareya quvvati kamligini bildiruvchi maʼlum boʻlgan amallar qatorini oʻz ichiga oladi.
Faoliyatlar, xizmatlar va translyatsiya qabul qiluvchilaridan farqli o'laroq, kontent provayderlari maqsad bilan faollashtirilmaydi. To'g'rirog'i, ular bir so'rov bilan maqsadli bo'lganda faollashadi ContentResolver. Kontentni hal qiluvchi provayder bilan tranzaktsiyalarni amalga oshiradigan komponentga kerak bo'lmasligi uchun kontent provayderi bilan barcha to'g'ridan-to'g'ri tranzaktsiyalarni boshqaradi va buning o'rniga ContentResolver ob'ektdagi usullarni chaqiradi. Bu kontent provayderi va ma'lumot talab qiluvchi komponent o'rtasida mavhumlik qatlamini qoldiradi (xavfsizlik uchun). Har bir turdagi komponentni faollashtirishning alohida usullari mavjud:
Siz harakatni boshlashingiz yoki Intentga startActivity() yoki belgisini o'tkazish orqali unga yangi narsa berishingiz mumkin startActivityForResult() (faoliyat natijani qaytarishini xohlasangiz).
Android 5.0 (API 21-daraja) va undan keyingi versiyalarida siz JobScheduler harakatlarni rejalashtirish uchun sinfdan foydalanishingiz mumkin. Oldingi Android versiyalari uchun ga o'tish orqali xizmatni boshlashingiz mumkin (yoki davom etayotgan xizmatga yangi ko'rsatmalar berish Intent) startService(). Intentga o'tkazish orqali xizmatga ulanishingiz mumkin bindService().
yoki Intent kabi usullarga o'tkazish orqali translyatsiyani boshlashingiz mumkin .sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast()
Kontent provayderiga qo'ng'iroq qilib so'rovni amalga oshirishingiz query() mumkin.
Do'stlaringiz bilan baham: |