Intent အကြောင်း တစေ့တစောင်း
Application တွေရဲ့ အဓိကအစိတ်ပိုင်းဖြစ်တဲ့ activites, services, broadcast revievers တွေဟာ intents ဆိုတဲ့ message ရမှသာ အသက်ဝင်စေ (activate ဖြစ်စေ) ပါတယ်။
ဖုန်းရဲ့ screen ကနေ userက activity တွေလုပ်မယ် ဆိုရင် (ဒီပုံမှာဆိုရင် ထားပါတော့ MP3 ) / user က play list တစ်ခုကို create လုပ်မယ် စတဲ့ activity တွေလုပ်မယ် ဆိုရင် Intents ကနေ သက်ဆိုင်ရာ activities တွေ၊ services တွေ၊ broadcast receiver တွေကို user လုပ်ခိုင်းချင်တဲ့ အလုပ်တွေကို လုပ်ပေးဖို့ ပြောပေးပါတယ််။ ဒါကြောင့် front end ဘက်မှာ user ကသာ View တွေကို Activity screen မှာ မြင်နေရပေမယ့် နောက်ကွယ်ကနေ အလုပ်လုပ်ပေးနေတာက Intent, Service, Broadcast receiver တွေဘဲလို့ယူဆ ရမှာဖြစ်ပါတယ်။
ဒီတော့ သိသင့်တာလေးတွေ ဒီနေရာမှာ နည်းနည်းပြောပါမယ်။
1. Activity: Activity တွေကတော့ ကိုယ့် application မှာ screen (UI) အပိုင်းကို လုပ်ဆောင်ပေးပါတယ်။ screen နောက်တစ်ခုယူချင်ရင် activity နောက်တစ်ခုကို create လုပ်ပေါ့။ View တွေကတော့ Activity တွေလုပ်နိုင်ဖို့ အတွက် UI component တွေပါ။ screen တစ်ခုကနေ တစခုကို ကူးချင်ရင် Intent ရဲ့အကူညီနဲ့ကူးပါတယ်။
အောက်မှာ ပြထားတာကတော့ Activity ရဲ့ Life Cycle ပါ။ Life Cycle ကို application ကနေ တိုက်ရိုက် control မလုပ်နိုင်ပါဘူး။ System ကတော့ memory နေရာလွတ်များများရချင်ရင် application တွေကို kill လုပ်နိုင်ပါတယ်။
Service: က activities တွေနဲ့ တူပါတယ်၊ ဒါပေမယ့် သူ့မှာ UI မရှိပါဘူး။ နောက်ကွယ်ကနေဘဲ service ပေးတာပါ။ ဥပမာ အရင်တုန်းက MP3 player တွေမှာဆိုရင် ဒီသီချင်းကိုနားထောင်နေတုန်း နောက်သီချင်းကိုရှာချင်တယ်ဆိုရင် hard button ကိုနှိပ်လိုက်တာနဲ့ သီချင်းရပ်သွားတယ်။ ပြီးမှ သီချင်းတွေ browse လုပ်တဲ့နေရာကိုသွား ပြီးမှ သီချင်းနားထောင်။ ဒီတော့ သီချင်းနားထောင်နေတဲ့ feeling လေးပျက်သွားတယ်ပေါ့။ ဒီမှာတော့ Service ကြောင့် သီချင်းရှာချင်ရင် သီချင်းကို ရပ်ပစ်လိုက်စရာမလိုဘဲ နောက်ကွယ်ကနေ (long-running background task အနေဖြင့်) service က အလုပ်လုပ်ပေးနေမှာပါ။
Core Services တွေကတော့
1. Activity Manager
2. Pacakage Manager
3. Window Manager
4. Resource Manager
5. Content Manager
6. View System
ဖြစ်ပြီး Hardware Service တွေကတော့
- Telephony Service
- Location Service
- Bluetooth Service
- WiFi Service
- USB Service
- Sensor Service
တွေရှိပါတယ်။
Broadcast Receiver: တွေကတော့ Activity ကနေ action တစ်ခုအတွက်သာ လုပ်ဆောင်ပေးခြင်းမျိုးမဟုတ်ဘဲ interest ဖြစ်တဲ့ receiver တွေက နေ broadcast တွေကို လက်ခံဖို့ပါ။
အဲ့ဒီလိုမျိုး Intent တွေကို သက်ဆိုင်ရာ component တွေဆီကို ပို့တဲ့ အခါမှာ လည်း သက်ဆိုင်ရာအလိုက် သီးခြားဆီ ပို့တဲ့ mechanisms ရှိပါတယ်။ အောက်မှာ ပြထားတဲ့ ပုံကိုကြည့်လို်က်ရအောင်။
ဒီလိုမျိုးသက်ဆိုင်ရာကို သက်ဆိုင်ရာအလိုက် ခွဲထားတဲ့အတွက် ဒီီmessaging system မှာ overlap (တခြားတစ်ယောက်အတွက် ပို့ပေးတဲ့ message ကို ကိုယ့်အတွက်လို့ထင်တာမျိုး) မရှိပါဘူး။ ဆိုလိုတာက Broadcast intent ဆိုရင် Broadcast အတွက်ဘဲ service အတွက် မဖြစ်နိုင်ပါဘူး။ ဒါကြောင့်ခုချိန်မှာ Intent Object ဆိုတာ ဘာလဲ သိဖို့လိုလာပါပြီ။
Intent Object ဆိုတာဘာလဲ ?
Intent object ဆိုတာ intent ကိုလက်ခံရရှိမယ့် component တွေအတွက် လိုအပ်မယ့် information တွေရယ် Android system အတွက် လိုအပ်မယ့် information တွေကို ထုပ်ပိုးထားတဲ့ Bundle (အထုပ်) တစ်ခုလို့ ဆိုရမှာပေါ့။
ကောင်းပြီ အဲ့ဒီ ထဲမှာကောဘာတွေပါတာလဲ?
- Component name
- Action
- Data
- Category
- Extras
- Flags
Component Name: Intent က handle လုပ်ပေးရမယ့် component ရဲ့နာမည်(Component Name object)ပါ။ အမှန်တကယ်တော့ target component ရဲ့နာမည် (com.example.project.app.FreneticActivity) ရယ် component ရှိနေတဲ့ package ရဲ့နာမည် (com.example.project) ၊ သူက optional ပါ (ထည့်ပေးလည်းရတယ် မထည့်ပေးလည်းရတယ်)
Action: ဘယ် component အတွက် ဘယ် action ကိုလုပ်မှာလည်း ပြောပေးရတာပါ။ အောက်က ဇယားမှာကြည့်နိုင်ပါတယ်။
ကောင်းပြီ အဲ့ဒီ ထဲမှာကောဘာတွေပါတာလဲ?
- Component name
- Action
- Data
- Category
- Extras
- Flags
Component Name: Intent က handle လုပ်ပေးရမယ့် component ရဲ့နာမည်(Component Name object)ပါ။ အမှန်တကယ်တော့ target component ရဲ့နာမည် (com.example.project.app.FreneticActivity) ရယ် component ရှိနေတဲ့ package ရဲ့နာမည် (com.example.project) ၊ သူက optional ပါ (ထည့်ပေးလည်းရတယ် မထည့်ပေးလည်းရတယ်)
Action: ဘယ် component အတွက် ဘယ် action ကိုလုပ်မှာလည်း ပြောပေးရတာပါ။ အောက်က ဇယားမှာကြည့်နိုင်ပါတယ်။
| Constant | Target component | Action |
| ACTION_CALL | Activity | Initiate a phone call |
| ACTION_EDIT | Activity | Display data for the user to edit |
| ACTION_MAIN | Activity | Start up as the initial activity of a task, with no data input and no returned output |
| ACTION_SYNC | Activity | Synchronize data on a server with data on the mobile device |
| ACTION_BATTERY_LOW | Broadcast receiver | A warning that the battery is low |
| ACTION_HEADSET_PLUG | Broadcast receiver | A headset has been plugged into the device, or unplugged from it. |
| ACTION_SCREEN_ON | Broadcast receiver | The screen has been turned on. |
| ACTION_TIMEZONE_CHANGED | Broadcast receiver | The setting for the time zone has changed. |
Data: ကိုယ်အလုပ်သွားလုပ်မယ့် data ရဲ့ URI နဲ့ MIME type ပါ။ ဥပမာ ကိုယ်ကသာ action ကိုယ် ACTION_EDIT လို့ ပြောလိုက်တယ်ဆိုရင် data field မှာ edit (ပြင်ဆင်ဖို့) အတွက် document ရဲ့ URI ပါမှာပါ။ action ကသာ ACTION_VIEW ဆိုရင် data field က http:URI ဖြစ်မှာပါ။
Category: Intent ကို handle လုပ်ရမယ့် component အတွက် additional information ပါ။ နောက်ပိုင်းကြမှဒါကို ဆက်ပြီး လေ့လာကြပါမယ်။
| Constant | Meaning |
| CATEGORY_BROWSABLE | The target activity can be safely invoked by the browser to display data referenced by a link |
| CATEGORY_GADGET | The activity can be embedded inside of another activity that hosts gadgets. |
Extras: Key-values pairs for additional information. သူက Java မှာဆိုရင် HashMap နဲ့ class တစ်ခုကနေ တစ်ခုဆီ data တွေ pass လုပ်သလိုမျိုးပါ။ နောက်ပိုင်း ဒါတွေလိုအပ်လာမှာပါ ခုတော့ ဒီလောက်ဘဲသိထားပါ။ သူ့ထဲ data တွေထည့်ချင်ရင် putExtras() နဲ့ထည့်ပြီး ပြန်ထုတ် ရင်တော့ getExtras() နဲ့ပါ။
Eg.
Intent i = new Intent(context, NameOfClassToTransitionTo.class)
i.putExtra(“key1″, “My first Info”)
i.putExtra(“key2″, “My second Info”)
Flags: Flags of various sorts ကိုတော့နောက်ပိုင်းမှ ဆက်လေ့လာပါမယ်။
ကောင်းပါပြီ အခု Intent ကိုသုံးပြီးတော့ Activity တစ်ခုကနေ တစ်ခုကို ကူးကြည့်ရအောင်
ရိုးရိုး Java program တွေလိုပါဘဲ နောက်ထပ် frame တစ်ခု ခေါ်ချင်ရင် ခေါ်ချင်တဲ့ frame ကို new နဲ့ ခေါ်လိုက်သလိုပါဘဲ။ ဒီမှာတော့ intent ကနေတဆင့် ခေါ်တာပေါ့။ ကဲ ရေးကြည့်ရအောင်။
နောက်ထပ် SecondActivity.java ထပ်ရေးပါမယ်။ သူ့မှာလည်း ဒီအတိုင်းဘဲ Button ကို click ရင် FistActivity ကိုကူးပါမယ်။ ကိုယ့်ဘာသာ ရေးကြည့်လိုက်ပါ။ screen မှာတော့ button တစ်ခုဆီနဲ့ TextView တစ်ခုဆီထည့်ထားပါတယ်။ run ကြည့်လိုက်တော့ ဒီလိုမျိုး screen တစ်ခုကနေ တစ်ခုကို ကူးနိုင်ပြီပေါ့။
အခု လေ့လာကြည့်သလောက်ဆိုရင် Android က Mobile Agent တွေလိုပါဘဲ။ Agent တွေသည် Context ပေါ်မှာ ရပ်တည်နေတာရယ် (Context.startActivity();)။ Agent အချင်းချင်း message တွေနဲ့ communicate လုပ်တာပါ။
Ref: http://developer.android.com/reference/android/content/Intent.html
နောက်နေ့မှတွေ့ကြမယ်!
Facebook comments:











တကယ့်ကို ပြီးပြည့်စုံတဲ့ ရှင်းလင်းချက်တွေနဲ့ Presentation ပါပဲဗျို့ … ရေလည် အားရှိတယ်ဗျာ …
Android system ကော apps တွေ ကော java နဲ့ပဲ ရေးတာပါလားခင်ဗျာ
C (core), C++ (some third party libraries), Java (UI)
http://en.wikipedia.org/wiki/Android_%28operating_system%29
System is under C/C++ because it’s Linux Kernel ..
if you want Kernel source code, take a look at android.git.kernel.org and try to clone with Git. Have Fun !
very very good!
Thanks for all!
ရေးထားတာပုံလေးတွေပါ ပါတော့ပိုရှင်းတယ်။ Reto Meier ရဲ ့ Professional Android Application Development ဆိုတဲ့စာအုပ်ကိုလည်းညွှန်းချင်ပါတယ်။ အဲဒီမှာတော့ database အတွက် SQLite, application state ကို သိမ်းထားဖို့ အတွက် Shared Perferences တို ့ပါ ပါတယ်။ Earthquake ဆိုတဲ့ tutorial ကိုလိုက်လုပ်ကြည် ့လိုက်ပြီးတော်တော်နားလည်သွားပါတယ်။ နောက်တစ်အုပ်ကတော့ Pro Android Games ပါ။ C++ games တွေကို java ဘက်ကို port လုပ်ဖို ့ဇောင်းပေးပြီးရေးထားတာပါ။ ကျွန်တော်တော့သိပ်မကြိုက်ပါဘူး။
[...] ၄. SMS Messaging in Android ၅. Intent အကြောင်း တစေ့တစောင်း [...]