Dancing green robot androidDancing green robot android Dancing green robot android Dancing green robot android Dancing green robot androidDancing green robot android Dancing green robot android Dancing green robot android

ကၽြန္ေတာ္သိေသာ Android အေၾကာင္း

 Android အေၾကာင္း(၁)
What is Android?( Android ဆိုုတာ ဘာလဲ)
Android လိုု ့ေျပာလိုက္တာနဲ ့က်ေနာ္တို႔တေတြ မ်က္လုုံးထဲမွာ အစိမ္းေရာင္ စက္ရုပ္ကေလးကတာ့ ျမင္ေယာင္ ေနမယ္ထင္တယ္။ ျမန္မာ mobile ဖုန္းအသံုးျပဳသူအမ်ားစုကေတာ့ Android ဆိုတဲ့နာမည္ကို တီးျမည့္ေခါက္မည့္ရွိျပီးသားျဖစ္မွာပါ။  အခုုမွ ဘာလိုု ့ ထေရးရလည္းဆိုုေတာ့ မသိေသးတဲ့သူေတြလဲ သိရေအာင္ က်ေနာ္သိထားတဲ့ Android အေၾကာင္းေလး အနည္းငယ္ကိုု ေ၀မ်ွတဲ့သေဘာေလာက္ပါပဲ။
androidlogo
တကယ္ေတာ့ Android ဆိုုတာ Linux Kernel ကိုုအေျခခံေရးသားထားတဲ့ Operating System တခုုျဖစ္ပါတယ္။ mobile ကိရိယာမ်ား ဖုုန္းမ်ားနဲ ့ tablet computer ေတြအတြက္ အဓိက ရည္ရြယ္ျပီး ထုုတ္လုုပ္ထားေသာ အသုုံးျပဴရလြယ္ကူတဲ့ Open source platform တခုုျဖစ္ပါတယ္။ Android ကုုမၼဏီကိုု ၂၀၀၃ ေအာက္တိုဘာေလာက္က Andy Rubin ၊ Rich Miner ၊ Chris White ၊ Nick Sears တို႔တေတြ က US California မွာ တည္ေထာင္ခဲ့ ၾကပါတယ္။ mobile phone ေတြအတြက္ သူတိုု ့ေတြၾကိဳးပန္းေနရင္း Rubin တစ္ေယာက္ ေငြေၾကး အဆင္မေျပမႈ႔ေတြ စတင္လာခဲ့ပါေတာ့တယ္။၂၀၀၅ ေလာက္မွာေတာ့ က်ေနာ္တိုု ့အားလုုံးသိျပီးသားျဖစ္တဲ့ နာမည္ၾကီး Google က Android Inc. ကိုု ၀ယ္ယူလိုုက္ပါေတာ့တယ္။ အဲဒီအခ်ိ္န္မွာ က်ေနာ္တိုု ့အားလုုံးက ေတာ့ Google ကေတာ့ Mobile ေလာကထဲ ၀င္လာေတာ့မယ္လိုု ့သုုံးသပ္ထင္ျမင္ ေနၾကတာေပါ့။ Google ဖုုန္းထြက္ေပၚ လာလိမ့္မယ္ ဆိုုျပီး ထင္ျမင္ခ်က္ေတြ ေပးျပီး ေမ်ွာ္လင့္ေနေပမယ့္ Google ဟာ တိတ္ဆိတ္ျငိမ္သက္စြာနဲ ့အသံတိတ္ေနခဲ့ပါတယ္။ အခ်ိန္ အေတာ္ၾကာ Google က ဘာထူးျခားမွဳမွ မလုုပ္ခဲ့ပါဘူး။
ဒါေပမယ့္ ၂၀၀၇ ခုုနွစ္ေလာက္မွာ Google က OHA (Open Handset Alliance ) အဖြဲ ့ကိုုစတင္ ဖြဲ ့စည္းတည္ေထာင္တယ္ဆိုုတာ ေၾကျငာ လိုုက္ပါတယ္။ တဆက္တည္း Android ကိုု Open Source လြတ္လပ္ေသာ မည္သူမဆိုု ရယူသုုံးစြဲနုုိင္ေသာ အရင္းျမစ္ (ပြင့္လင္း ရင္းျမစ္) အျဖစ္ တရား၀င္ေၾကျငာလိုုက္တဲ့အခ်ိန္မွာ အားလုုံး မ်က္ေသေသကုုန္ၾကရေလာက္ေအာင္ျဖစ္ခဲ့ရပါတယ္။ ဒီေနရာမွာ OHA အဖြဲ အေၾကာင္းအနည္းငယ္ ေ၀မ်ွရွင္းလင္းလိုုပါတယ္။
What is Open Handset Alliance (OHA)?
Open Handset Alliance အဖြဲ ့ၾကီးဟာ mobile ကိရိယာမ်ားအတြက္ open standard ေတြကိုု အေကာင္ထည္ေဖာ္ဖိုု ့ mobile ကိရိယာေတြထုုတ္လုုပ္တဲ့သူေတြ ေနာက္ mobile နက္၀က္ကြန္ယက္ ၀န္ေဆာင္မွဳေရာင္းခ်မႈလုုပ္တဲ့သူေတြ နဲ ့mobile နွင့္ သက္ဆုုိင္တဲ့ အျခားသက္ဆုုိင္တဲ့အဖြဲ ့စည္းေတြ ပူးေပါင္းတည္ေထာင္ထားေသာ Non -Profit အဖြဲ ့ၾကီး တဖြဲ ့ျဖစ္ပါတယ္။ OHA က mobile users ေတြကိုု ပိုုမုုိေကာင္းမြန္တဲ့ Features ေတြ ေပးနုုိင္ဖိုု ့ တီထြင္ဆန္းသစ္မွဳေတြ ပိုုျပီး တိုုးတက္ ပြင့္လင္းလာဖိုု ့ေစ်းသက္သာတဲ့ mobile ဆက္သြယ္ေရးရရွိဖိုု ့ ရည္ရြယ္ ဦးတည္ပါတယ္။ Android ဟာ Google ကပဲ ပိုုင္ဆိုုင္တဲ့ အေနအထားတင္ မဟုုတ္ေတာ့ဘဲ OHA က ပိုုင္ဆုုိင္တဲ့အေျခအေနျဖစ္သြားတဲ့သေဘာေပါ့။ OHA အဖြဲ ့ၾကီးမွာ Google, Sony , HTC, Samsung, LG, T-Mobile , Nividia, Dell စတဲ့ ကုုမၺဏီၾကီးေတြပါ၀င္ပါတယ္။

OHA

ဒီေနရာမွာ အရင္တုုန္းကလိုု ကုုမၺဏီၾကီးေတြဟာ သက္ဆုုိင္ရာ နယ္ပယ္အလိုုက္ ရပ္တည္ခ်င္းမရွိေတာ့ပဲနယ္ပယ္စုုံမွာ ပါ၀င္လုုွပ္ရွားလာတာကိုုသတိျပဳရမွာပါ။ အရင္ကလိုု Google ဟာလည္း Search Engine နယ္ပယ္တင္မကေတာ့ပဲ mobile phone နယ္ပယ္ လူမွုုဆက္သြယ္ေရး နယ္ပယ္ေတြအထိ ၀င္ေရာက္လုုပ္ကိုုင္လာတာကိုု သတိျပဳမိၾကမွာပါ။
Google က၂၀၀၇ ခုုနွစ္မွာ OHA ကိုုတည္ေထာင္ေၾကာင္းနွင့္ Android ကိုု Open Source ျဖစ္ေၾကာင္းေၾကျငာျပီးတဲ့ေနာက္ ၂၀၀၈ ခုုနွစ္မွာ Android SDK (Software Development Kit) version 1.0 ကိုု စတင္ျဖန္ ့ခ်ီလိုုက္ပါတယ္။ သိပ္ေတာင္ မၾကာလိုုက္ပါဘူး T-Moblie ဆက္သြယ္ေရး ၀န္ေဆာင္မွဳ ကုုမၺဏီက US မွာ HTC ကထုုတ္တဲ့ G1 mobile ဖုုန္းမွာ စတင္အသုုံးျပဳခဲ့ပါတယ္။
၂၀၀၉ -၂၀၁၀ ေလာက္မွာေတာ့ Android အသုုံးျပဳတဲ့ ဖုုန္းေတြ Tablet computer ေတြ device ေတြဟာ မွိဳလိုုေပါက္ေအာင္ ထြက္ေပၚလာခဲ့ပါေတာ့တယ္။ Android ဟာ Open Source ျဖစ္တာေၾကာင့္ အခ်ဳိ ့ေသာထုုတ္လုုပ္သူေတြဟာ မိမိတိုု ့လိုုအပ္ခ်က္အလိုုက္ျပင္ဆင္ထုုတ္လုုပ္ထားတဲ့ မူကြဲတဲ့ Version အသစ္ေတြ (Donut , Eclair , Cupcake ) ဟာလဲ အေတာ္မ်ားမ်ားထြက္ေပၚလာတယ္။ ခုုဆိုု Smart phone ေလာကထဲမွာ ထိပ္တန္းကိုု တိုုးထြက္လာခဲ့ျပီး ေခါင္းေဆာင္ဖိုု ့ေတာင္ ျဖစ္ေနျပီပဲ။ ေန ့စဥ္ Android User ေတြဟာလဲ တိုးပြားလွ်က္ရွိပါတယ္။
Android ဟာ developer ေတြအတြက္ေတာ့တကယ့္ကိုု ျပည့္စုုံေကာင္မြန္တဲ့ နတ္ဘုရားသခင္တပါးလိုပါပဲ။ လူသားေတြအတြက္ အၾကိဳးျပဳစက္ရုပ္ေလး ေပါ့ဗ်ာ။က်ေနာ္တိုု ့ေတြ Android Touch Screen ဖုုန္းေတြကို ေစ်းသက္သက္ သာသာ အရည္ေသြးေကာင္းေကာင္းမြန္နဲ ့ သုုံးနုုိင္တာဟာ Open Souce ျဖစ္တာကလဲ တကယ့္ကို အေရးၾကီးတဲ့ အပိုင္း တခုုပါ။ ပိုျပီးေကာင္းမြန္ေအာင္ ဖန္တီးျပဳျပင္၇င္း ပိုုျပီးေကာင္းမြန္လာခဲ့တာပါပဲျဖစ္ပါတယ္။ ဒီထက္လဲ ပိုုေကာင္းလာၾကအုုန္းမွာပါ လူသားတိုု ့ရဲ တီထြင္ဖန္တီးနုုိင္မွဳကိုု ေဘာင္ေတြဖယ္ရွားေပးလိုုက္တာ လူသားေတြအတြက္ အၾကီးမားဆုုံးအေထာက္အပံ့ျဖစ္ေစတာ အားလုုံးသတိျပဳမိမွာပါ။ ဒါဟာ Open Source ျဖစ္တာေၾကာင့္ပဲမဟုုတ္ပါေလာ။ Android ဟာ ဘယ္သူမဆိုု ရယူသုုံးစြဲနုုိင္ တာ ျပဳျပင္နုုိင္တာတာ လြတ္လပ္စြာ ဆင့္ပြားအသုုံးျပဳႏိုင္တဲ့ မူပိုင္ခြင့္ အမ်ဳိးစားထဲကပါ။ ဒီလိုု Open Source လုုပ္တဲ့ေနရမွာ တကယ့္ Meaching Level မွာအလုုပ္လုုပ္တဲ့ Low Level Linux module ေတြအထိ ေနာက္ Android သုုံး ကိရိယာ ဘယ္ကိရိယာေပၚမွာမဆိုု အလုုပ္လုုပ္တဲ့ code အစုအေ၀း code library ျဖစ္တဲ့ Native Library ေတြ Application Framework ေတြ အုုိး ေနာက္ဆုုံးအဆင့္ complete application ေတြထိေအာင္ မည္သူမဆိုု မည္သည့္ developer မဆိုု ရယူသုံးဆြဲ ႏိုင္တဲ့ Open Source ပဲျဖစ္ပါတယ္။ တခ်ဳိ ့သိပ္ျပီး ၀ါသနာၾကီးလြန္းတဲ့ developers ေတြဆိုု application lelvel ကေန Kernel အထိဆင္းကုုန္ၾကေတာ့တာပါပဲ။ ဒီလိုုေတြေၾကာင့္ developer တစ္ေယာက္ဘက္ကၾကည့္မယ္ဆိုုရင္ platform တခုုလုုံးရဲ ့ source ကိုုသိရွိနုုိင္မွေတာ့ Operating System တခုုလုုံးဘယ္လိုုတည္ေဆာက္ထားလဲဆိုတာ လုံ၀၀အေသးစိတ္နားလည္ႏိုင္ပါတယ္။ ဒီေတာ့ သူ ့အတြက္ ေရးသား develop လုုပ္မယ့္ applications ေတြဟာ OS ေပၚမွာ ေကာင္းမြန္စြာအလုုပ္လုုပ္ျပီး စြမ္းရည္ျမင့္တဲ့ application တခုုအျဖစ္ရရွိေနႏိုင္ပဲေလ။ Handset ေတြ Devices ေတြထုုတ္လုုပ္တဲ့သူဘက္ၾကည့္မယ္ဆိုုရင္လဲ ကိုုယ္ထုုတ္လုုပ္မယ့္ Hadware devices ေတြနဲ ့ကိုုက္ညီမယ့္၊ customer ရဲ႕လိုအပ္ခ်က္နဲ ့ကိုက္ညီမယ့္ ကိုုယ္ပိုင္ Android OS တခုလိုမ်ဳိးျဖစ္ေအာင္ ျပင္ဆင္ထုတ္လုပ္ ထည့္သြင္းႏိုင္ေနပါတယ္။
Android ရဲ႕ တကယ့္ရည္ရြယ္ခ်က္ေတြကလဲ mobile user ေတြေစ်းသက္သာဖို႔ ေနာက္ developer ေတြ ထုပ္လုပ္သူေတြ အဆင္ေျပေျပထုတ္လုပ္ႏိုင္ဖို႔ ရည္ရြယ္ခဲ့တာပဲေလ။ ဒီလို Mobile ေလာကအတြက္ mobile devices ေတြအတြက္ ရည္ရြယ္တည္ေဆာက္ထားျခင္းျဖစ္သလိုု mobile devlce ေတြရဲ႕ အားနည္ခ်က္ေတြျဖစ္တဲ့ battery life ၊ ေနာက္ RAM speed , processign speed ေတြကိုုပါ ထည့္သြင္းစဥ္းစားျပီး ထုုတ္လုပ္ခဲ့တာျဖစ္ပါတယ္။ mobile ကိရိယာအမ်ားစုုဟာ battery ရဲ႕ပါ၀ါနဲ ့ အလုုပ္လုုပ္ၾကတာ အားလုံး သတိထားမိမယ္ထင္ပါတယ္။ ဘထၳရီသက္တန္းကိုု လည္း အရမ္းၾကီး ေကာင္းမြန္ ေအာင္ မလုုပ္နုုိင္ေသးတဲ့အေျခအေနမ်ဳိးမွာ ဘယ္လိုုလုုပ္ခ်င္းအားျဖင့္ battery ကိုုသက္သာေစႏိုင္မလဲ ေနာက္ Mobile ဆိုုတဲ့အတုိင္း သယ္ရျပဳရလြယ္ကူေစဖိုု ့တဲ့ ရည္ရြယ္ခ်က္ကရွိေနျပန္ေတာ့ size ကိုုလဲ ေသးႏိုင္သမွ်ေသးေအာင္ လုပ္ရျပန္တယ္ ဒီေတာ့ မွတ္ဥာဏ္ Memory ပိုင္းမွာလဲ အကန္႔အသတ္ေတြက ရွိေနပါေသးတယ္။ ဒီလိုအေျခအေနမ်ဳိးေတြကိုပါထည့္သြင္းစဥ္းစားထားတဲ့ Android OS ဟာ device ရဲ ့ size အလိုုက္ screen size ၊ resolution ရုုပ္ထြက္္ျပင္းအား ေနာက္ အတြင္းပိုင္း ပါ၀ါပိုင္းဆိုင္၇ာလုပ္ေဆာင္မွဳ ေတြကို ကိုယ္လိုသလိုလိုက္ေလွ်ာညီေထြမႈ ရွိေအာင္ ျပဳျပင္ေရးသားႏိုင္တဲ့ Bionic ကိုထည့္သြင္းထားပါတယ္။ Bionic အေၾကာင္းကိုု ေနာက္ပိုင္း ေရးသားမယ္ အပိုုင္းမ်ားမွာရွင္းလင္းတင္ျပေပးပါ့မယ္။
ေနာက္ျပီး က်ေနာ္တိုု ့အေနနဲ ့ စိတ္ပါ၀င္စားလာလိုု ့စမ္းသပ္ မယ္ဆိုုရင္ ေတာင္ Application developer တစ္ေယာက္အဖိုု ့Application တခုုကိုု လြယ္ကူလ်ွင္ျမန္စြာေရးသားနုုိင္ဖိုု ့ tools ေတြ Framework ေတြအားလုုံးရရွိပါ၀င္ေနပါတယ္။ေနာက္ဆုုံးဗ်ာ စတင္စမ္းသပ္ေရးသား ဖန္တီးဖိုု ့ Android Device ေတာင္ ၀ယ္ေနစရာမလိုုပဲ Android Software Developement Kit (SDK) ရွိလ်ွင္ကိုုျဖစ္ေနပါျပီ။ 
 

Android အေၾကာင္း (၂) 

အရင္ က်ေနာ္သိေသာ Android အေၾကာင္း အပိုင္းမွာ တုန္းက နည္းပညာပိုင္း ဆုိင္ရာ အသုံးႏႈန္းပိုင္း အနည္းငယ္သာ ပါ၀င္ေအာင္ ေရးးသားခဲ့ျပီး မည္သူမဆို ဖတ္ရႈ႕လို ့ရႏိုင္မယ့္ အေျခအေနမ်ဳိး တင္ျပခဲ့ပါတယ္။ ယခု အပိုင္း (၂) မွာေတာ့ နည္းပညာပိုုင္းဆုုိင္ရာ စကားလုုံးမ်ား အသံုးအႏႈန္းမ်ား အနည္းငယ္ပိုမို ပါ၀င္လာမွာျဖစ္တယ္ဆိုတာ ဦးစြာပထမ အသိေပးပါရေစ။ ယခု အပိုင္း (၂) မွာ Android ကို ဘယ္လို ဘယ္ပုံဖြဲ ့စည္းထားလဲဆိုတာကို က်ေနာ္သိသေလာက္ အတက္နုုိင္ဆုုံးတင္ျပ ေရးသားသြားမွာပါ။ လိုုအပ္ခ်က္ေတြရွိေနခဲ့ရင္ မွားယြင္းေနတာမ်ားရွိရင္လဲ စာဖတ္သူတိုု ့ရဲ႕ အေတြ႔အၾကဳံကိုလဲ ခ်က္ျခင္းေ၀မွ်ေပးဖိုု ့ေထာက္ျပေ၀ဖန္ေပးဖိုု ့ၾကိဳတင္ပန္ၾကားအပ္ပါတယ္။ ဒါမွ ပိုုျပီးမွန္ကန္ ေကာင္းမြန္တဲ့ အခ်က္အလက္ေတြ လူအမ်ားဆီကိုေရာက္ႏိုင္မယ္လိုု ့ က်ေနာ္ထင္ပါတယ္။


Android ကိုုဘယ္လိုု ဖြဲ ့စည္းထားပါသလဲ?
ဒီေမးခြန္းဟာ သိပ္ကို ေမးသင့္ေမးအပ္တဲ့ ေမးခြန္းတခုျဖစ္သလိုု သိထားသင့္တဲ့အခ်က္ထဲမွာလဲပါ၀င္ပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ ကိုယ္က Android developer တစ္ေယာက္ ျဖစ္ဖိုု ့ စိတ္ကူးရွိေနျပီဆိုရင္ေတာ့ ကိုယ္စီးမယ့္ျမင္းဟာ အထီးလား အမလားဆိုတာေတာ့ သိထားသင့္တယ္ မဟုတ္လား။ Android Application ကိုုေရးသားမယ့္ developer  တစ္ေယာက္ဟာ ကိုယ္ေရးသားမယ့္ Operating System ဟာ ဘယ္လို ဖြဲ ့စည္းတည္ေဆာက္ထားသလဲ system ရဲ ့အခင္းအက်င္း ေတြကို ေကာင္းစြာ နားလည္ သေဘာေပါက္ ထားမွသာလွ်င္ ကိုယ္ေရးသားမည့္ application ေတြဟာ ၄င္း OS ေပၚမွာ ေကာင္းစြာ အလုပ္လုပ္မွာပါ။

Android developer တစ္ေယာက္အတြက္ တကယ့္ကို အေရးပါဆုုံး အခ်က္ကေတာ့ API (Application Programming Interface) Level ျဖစ္ပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ ကိုယ့္ application ဟာ ဘယ္ ကိရိယာေတြ (devices) ဘယ္ OS version မွာ အလုပ္ လုပ္မည္ မလုပ္မည္ ဆိုတဲ့ ကိစၥကို သတ္မွတ္ နုုိင္စြမ္းရွိတဲ့ အဆင့္ျဖစ္လိုု ့ပါပဲ။ ဥပမာ တခ်ဳိ႕ Application ေတြဟာ graphic ဘယ္ေလာက္ရွိမွ CPU ကဘယ္ေလာက္ျဖစ္မွ OS version က ဘယ္ေလာက္မွသုုံးလိုု ့ရမယ္ မရဘူး စတာေတြကို ဒီအဆင့္မွာ သတ္မွတ္တာ ျဖစ္တဲ့အတြက္ေၾကာင့္ပါ။

Android ဟာ Linux Kernel ကိုု အေျခခံေရးသားထားတဲ့ OS (Operating System)  တခုုျဖစ္တယ္ဆိုုတာ ျပီးေတာ့ Open Source ျဖစ္တယ္ဆိုတာကိုု ျပီးခဲ့တဲ့ အပိုုင္းမွာ တင္ျပခဲ့ပါတယ္။ ဒါဆိုု ဘာအေၾကာင္း ေတြေၾကာင့္မ်ား Android က Linux အေပၚ အေျခခံရသလဲဆိုုတဲ့ ေမးခြန္း တခုု ထြက္လာပါတယ္။ Linux  ဟာလဲ Free and Open Source ျဖစ္ပါတယ္။  ျပီးေတာ့ Linux က ေပါ့ပါးတယ္။ လုုံျခဳံမွဳရွိတယ္။ Features ေတြစုုံလင္မွဳရွိတယ္။

Linux ဟာ ကြန္ပ်ဳတာ hardware ေတာ္ေတာ္မ်ားမ်ားမွာ ( mobile  ဖုုန္းေတြ၊ tablet computers ေတြ network routers, televisions , vedio game consoles, desktop computer, mainframes နဲ ့super computer ေတြအထိ) အလြယ္တကူ ေပါင္းစပ္ အလုပ္ လုပ္နုုိင္စြမ္း ရွိပါတယ္။ ဒီလို hardware အေတာ္မ်ားမ်ားမွာ အလြယ္တကူ ေပါင္းစပ္ အလုုပ္ လုုပ္နုိင္စြမ္းရွိတဲ့ OS တခုုကိုု Android က အေျခခံျပီး ရယူသုုံးစြဲလုုိက္ျခင္းဟာ hardware မ်ားကိုု အတိုုင္းအတာ တခုုအထိခ်ဳံ ့နုုိင္ခဲ့သလိုု hardware နွင့္ ၄င္းရဲ႕ features အေတာ္ မ်ားမ်ားကိုလည္း ထည့္သြင္းစဥ္းစားဖိုု ့မလိုုအပ္ေတာ့ပါဘူး။ အားလုုံး သိျပီးတဲ့အတုုိင္း  Linux ရဲ ့Low Level အပိုုင္း အေတာ္အမ်ားမ်ားကိုု ေပါ့ပါးတဲ့ C programming language code  ေတြနဲ ့ေရးသားထားတဲ့အတြက္ Android ရဲ႕ hardware device ေတြနဲ ့android application တိုု ့ဟာ လြယ္ကူ အဆင္ေျပစြာ ေပါင္းစပ္ အလုပ္လုပ္နုုိင္ ေနေတာ့တာပါပဲျဖစ္ပါတယ္။ ဒါေၾကာင့္ Android ဟာလဲ ေပါ့ပါးသြက္လပ္တဲ့ mobile OS တခုုအျဖစ္ ရပ္တည္လာနုုိင္ေတာ့တာပါပဲျဖစ္ပါ
တယ္။

ေနာက္ျပီး Linux ဟာ လုုံျခဳံေရးေကာင္းမြန္တဲ့ Operating System ဆိုတာ ဘယ္သူမွ မျငင္းနုုိင္ပါဘူး။ သူ ျဖတ္သန္း လာခဲ့တဲ့ သမိုုင္းကာလ ေတြကိုုၾကည့္ရင္ သူယခုု ရပ္တည္ေနတဲ့ အေျခအေနေတြကိုုၾကည့္ရင္ ဘယ္ေလာက္ထိ လုုံျခံဳမွုု ေပးနုုိင္သလဲဆိုုတာ သိနုုိင္ပါတယ္။ ျပီးတာ့ application တစ္ခုကိုတစ္ခုု တည္မွီျပီး အလုပ္ လုပ္ျခင္း မရွိတာေၾကာင့္ application တစ္ခုုကေန application တစ္ခုုသိုု ့ထိုုးေဖာက္ျပီးေတာ့ တိုုက္ခိုုက္လာနုုိင္ေသာ လုုံျခံဳေရးဆုုိင္ရာ ျပႆနာမ်ားလည္း အေတာ့ကိုု ကင္းရွင္းသြားပါတယ္။ Adroid ဟာ ဘာေၾကာင့္ ဒီလိုု လုုံျခဳံေရးဆုုိင္ရာ အားသာခ်က္ မ်ာစြာရွိေနတဲ့ Linux Kernel ကိုုအေျခခံရယူသုုံးစြဲ ရသလဲဆိုတာ ေမးခြန္းေတာင္ ေမးေနစရာမလိုုေအာင္ပါပဲ။ ၂၀၁၀ စက္တင္ဘာေလာက္မွာ Linux Kernel developer တဦးျဖစ္တဲ့ Rafael J.Wysocki က mainline Linux wakeup events Framework အတြက္ patch တခုုကိုု ထည့္သြင္းခဲ့ပါတယ္။ Android devices မ်ားရဲ ့drivers ေတြအတြက္ေတာ့ သိပ္ေကာင္းတဲ့ patch တခုုပဲေလ။ ၂၀၁၁ ဒီဇင္ဘာလ ေလာက္မွာေတာ့ Android ရဲ ့MainLining Project ကိုုစတင္ခဲ့ျပီး ၄င္းတိုု ့ရဲ ့  ရည္ရြယ္ခ်က္ကေတာ့ Adriod ရဲ ့drivers မ်ား Patch မ်ား နဲ ့Features မ်ားကိုု Linux Kernel ထဲကိုု Linux version 3.3 မွစျပီး ထည့္သြင္းဖိုု ့ရည္ရြယ္ခဲ့တာျဖစ္ပါတယ္။

Android မွာ Linux ကဲ့သိုု ့ပင္ Mobile devices (ေ၇ြ ့လားနုုိင္ေသာ ၾကိဳးမဲ့ကိရိယာမ်ား) မ်ားအတြက္


မွတ္ဥာဏ္ ပိုုင္းဆုုိင္ရာ ထိန္းခ်ဳပ္စီမံနုုိင္ျခင္း (Memory Management) : မလိုုအပ္ေသာအခ်ိန္တြင္ မလိုုအပ္ေသာ လုုပ္ငန္းေဆာင္တာမ်ားအားရွင္းလင္းျခင္း၊ အျမဲတမ္းသုုံးေလ့ရွိေသာ applicaiton မ်ားလုုပ္ငန္းေဆာင္တာမ်ားကိုု မွတ္သားထားျပီး ရွာေဖြလုုပ္ေဆာင္တဲ့အခါမွာ လွ်င္ျမန္စြာ ဦးစားေပးေဖာ္ျပေပးနုုိင္ျခင္း စတဲ့လုပ္ငန္းေဆာင္တာေတြဟာ မွတ္ဥာဏ္ပိုင္းဆုုင္ရာ ထိန္းခ်ဳပ္စီမံနုုိင္ျခင္းပါပဲ။

ဘထၳရီမွ စြမ္းအင္ရယူသုုံးစြဲမွဳကိုု ထိန္းခ်ဳပ္စီမံနိုုင္ျခင္း (Power Management) : မလိုုအပ္တဲ့လုုပ္ငန္းေဆာင္တာမ်ာ
းအား memory မွာ ဖယ္ရွားျခင္းဟာလဲ memory သုုံးစြဲမွဳ နည္းသြားတဲ့အတြက္ စြမ္းအင္ပိုမို သုုံးစြဲလာႏိုင္ျခင္း screen resolution ကိုုထိန္းခ်ဳပ္စီမံႏိုင္ျခင္းေၾကာင့္ စြမ္းအင္သုုံးစြဲႏိုင္ခ်ိန္ ပိုမိုေကာင္းမြန္လာျခင္း စသည့္ ဘထၳရီမွ စြမ္းအင္သုုံးစြဲမႈ ၾကာခ်ိန္ကိုုျမင့္တင္ႏိုင္ဖို႔ ေရးဆြဲးထားသည့္ Management tool တခုပါပဲ။

ကြန္ယက္ခ်ိတ္ဆက္သုုံးစြဲနုုိင္
တဲ့ networking စတဲ့စြမ္းအင္ျမင့္ Features မ်ားလဲပါ၀င္ပါတယ္။ Android ဟာ  GSM/EDGE, CDMA, IDEN, EV-DO, UMTS, Bluetooth, Wifi, LTE နွင့္ Wimax အစရွိတဲ့ ကြန္ယက္ခ်ိတ္ဆက္မႈ နည္းပညာမ်ားကိုု အေထာက္အပံ့ေပးပါတယ္။

အျခား စြမ္းအင္ျမင့္ Features ေတြျဖစ္တဲ့ Handset Layouts ( graphic ရုပ္ပိုင္းဆိုင္မ်ားအဆင္ေျပေ
စရန္)၊ Storage (data ေတြသုုံးဖိုု ့အတြက္ ေပါ့ပါးတဲ့ Relational database အမ်ဳိးစား ျဖစ္တဲ့ SQLite မ်ားသုုံးစြဲထားျခင္း)။  Multiple Language Support, Web Browser, JavaSupport , Multitasking,Multi touch, Screen capture ,Additional Hardware support, Media/Streaming Media support, Video calling စတဲ့ Features  မ်ားကိုုရရွိနုုိင္ပါတယ္။

တကယ္ေတာ့ Android OS ကိုု အလႊာ အထပ္ထပ္နဲ့ ေပါင္းစပ္ဖြဲ ့စည္းထားတာျဖစ္ပါတယ္။ ျပီးေတာ့ ၄င္းအလႊာ တခု နွင့္ တခုဟာလည္း သည္းျခားစြာ ကြဲျပား ရပ္တည္ေနျခင္းမ်ဳိး မဟုုတ္ဘဲ တခု ႏွင့္ တခုေပါင္းစပ္ အလုုပ္ လုုပ္ၾကတဲ့ ပုံစံမ်ဳိးျဖစ္ပါတယ္။ ဒီေအာက္က ပုုံေလးကေတာ့ Android Operating System ကို ဘယ္လိုုအလႊာ အဆင့္ဆင့္နဲ ့ ဖြဲ ့စည္းထားသလဲ ဆိုုတာကိုုျပသတဲ့ပုံ ( Android Stack) ပါပဲ။

Android Stack


Android ဟာ ၄င္းရဲ ့ တကယ့္ core system services ေတြျဖစ္တဲ့  လုုံျခဳံမွဳ (security)၊ မွတ္ဥာဏ္ပိုင္းဆိုင္ရာ ထိမ္းခ်ဳပ္ စီမံခန္ ့ခြဲမႈ (Memory management)၊ စြမ္းအင္သုုံးစြဲမွဳဆိုုင္ရာ စီမံခန္ ့ခြဲမွဳ (Power Management)၊ လုုပ္ငန္းေဆာင္တာ စီမံခန္ ့ခြဲမႈ (process management)၊ ကြန္ယက္ခ်ိတ္ဆက္မွုုဆုdင္ရာ (nework stack)၊ hardware မ်ား ႏိုးၾကြားလုပ္ေဆာင္နုုိ္င္ေ
စမယ့္ (driver model) စသည္တိုု ့အတြက္ Linux Kernel 2.6 ကိုစတင္ျပီး ရယူသုုံးစြဲခဲ့ပါတယ္။ Apache 2.0 license ေအာက္မွာ ျဖစ္ပါတယ္။ အထက္မွာေဖာ္ျပခဲ့သလိုုပဲ linux ရဲ  ့low level အပိုုင္းအေတာ္မ်ားမ်ားဟာ C code ေတြျဖစ္တာေၾကာင့္ hardware မ်ားကိုု ေကာင္းစြားသိရွိျပီး လြယ္ကူေပါ့ပါးစြာ ေပါင္းစပ္အလုပ္လုပ္နုုိင္ပါတယ္။

Android အတြက္ applications မ်ား၊ လိုုအပ္တဲ့ services မ်ား ဖန္တီးေရးသား တဲ့အခါမွာ ၄င္း  apps မ်ားနွင့္ services မ်ားဟာ Andorid OS ရဲ ့Application Layer မွာ အလုုပ္ လုုပ္ပါတယ္။ Android သာမန္အသုုံးျပဳသူ(end user)ဟာ ဒီ Application Layer ေပၚမွ apps မ်ား၊ services မ်ားကိုုသာ အသုုံးျပဳမွာပါ။ ေအာက္က layers ေတြကိုု သူတိုု ့သတိထားမိမွာမဟုုတ္ပါဘူး။

ဥပမာ က်ေနာ္တိုု ့ Contact Book application တခုုေရးသားတယ္ဆိုုပါေတာ့ဗ်ာ။ အသုုံးျပဳသူက contact အသစ္ဖန္တီးျခင္း၊ ဖ်က္ျခင္း၊ ျပင္ဆင္ျခင္း၊ ရွာေဖြျခင္းစတာေတြပဲ သူတိုု ့အသုုံးျပဳမွာပါ။ ဒီေနရာမွာ သိရမွာက Andorid Application layers ေပၚက apps & services မ်ားဟာ ေအာက္က layers ေတြနဲ ့ဆက္ႏြယ္ အလုုပ္လုုပ္ေဆာင္တယ္ဆိုုတာကိုု သိထားရမွာပါ။  အထက္ေဖာ္ျပပါ contact app ေရးသားတဲ့အခါ ေဒတာေတြသိမ္းဖိုု ့အတြက္ SQLite လိုု libraries ေတြ  စတဲ့ libraries ေတြအသုုံးျပဳရမွာပါ။ ဆိုုလိုုခ်င္တာက applcation layer မွာေရးသားမယ္ applications ေတြဟာ Native Libraries  ေတြကို အသုုံးျပဳေရးသားတယ္။ ၄င္းတိုု ့လိုုအပ္တဲ့ layers ေတြနဲ ့ခ်ိတ္ဆက္အလုုပ္လုုပ္တယ္ဆိုတာ
ကိုသိေစခ်င္တာပါ။ ၄င္း Native Libraries ေတြဟာ C/C++ လိုု programming နဲ ့ေရးသားထားျပီး open source ျဖစ္တဲ့အတြက္ မည္သူမဆိုု သိရွိနုုိင္ေလ့လာနုုိင္တဲ့အျပင္ ရယူသုုံးစြဲျပင္ဆင္နုုိင္ခြင့္ရွိပါတယ္။ ဒီအေၾကာင္းေတြကို အရင္အပိုင္းမွာေျပာၾကားခဲ့ျပီးျဖစ္ပါတယ္။

SQLite :application အားလုုံးအတြက္ ေပါ့ပါးျပီး စြမ္းအင္ျမင့္မားတဲ့ Relational Database Engine ရရွိနုုိင္ပါတယ္။ Features ေတာ္ေတာ္မ်ားမ်ား စုံလင္စြာ ပါရွိတဲ့ SQL Database အမ်ိဳးအစားပါ။


Surface Manager
WebKit- modern web browser engine တမ်ဳိးပါ။ Safari ၊ Chrome ႏွင့္ အျခား browser မ်ားတြင္သုုံးထားေသာ web rendering engine မ်ဳိးျဖစ္ပါတယ္။
Open GL -3D graphic libraries မ်ားပါ။ Open GL ES 1.0 APIs ကိုုအေျခခံထားတာပါ။


FreeType-bitmap and vector font rendering
Surface Manager- Application  ေပါင္းစုုံက  ၂ ဖက္ျမင္ ၃ ဖက္ျမင္ အလႊာမ်ားအဆင္ေျပေျပ ေပါင္းစပ္ အလုုပ္လုုပ္နုုိင္ဖိုု ့၊ သက္ဆုုိင္ရာ subsystem ေတြအထိ display access ကို စီမံခန္ ့ခြဲနုုိင္တဲ့ libraries ျဖစ္သည္။
Media libraries မ်ားမွာလဲ လူသုုံးမ်ားတဲ့ ရုုပ္ပုံ၊ အသံ၊ ရုုပ္ရွင္ ဖိုုင္ေတြရဲ ့format  ေတြျဖစ္တဲ့ ( MPEG4, 3GP, MP3, JPG, PNG စတဲ့ ဖိုုင္အမ်ဳိးစားမ်ား ေထာင့္ပံ့တဲ့ libraries မ်ားျဖစ္သည္။


SSL -Secure Socket Layer  လုုံျခဳံမႈဆုိင္ရာ libraries မ်ား ျဖစ္သည္။
Libc - ဆိုုတာကေတာ့ System C libraries မ်ားျဖစ္ပါတယ္။

အထက္ေဖာ္ျပပါ libraries မ်ားကိုု နဂိုုအရွိတုုိင္း တုုိက္ရိုုက္အသုုံးခ်နုုိင္ပါတယ္။ ဒါေပမယ့္တခ်ဳိ ့ mobile ကိ၇ိယာ ထုုတ္လုုပ္သူမ်ားက မိမိတိုု ့ထုုတ္လုုပ္မယ့္ hardware မ်ားနွင့္ကိုုက္ညီေစရန္  စံထား C Library မ်ားကိုု ျပန္လည္ေရးသားျပီး အသုုံးျပဳေသာ မူကြဲ တစ္မ်ဳိး အျဖစ္ Bionic  ကိုု ထည့္သြင္း သုုံးစြဲပါတယ္။ Bionic ကိုု သုုံးစြဲရတာ အေၾကာင္း ၂ ရပ္ေၾကာင့္ပါ။
နည္းပညာအပိုု္င္းအရ moblie devices မ်ားကို သယ္ယူရအဆင္ေျပေစရန္ ေသးငယ္ေအာင္ ထုုတ္လုုပ္ရပါတယ္။ mobile devices မ်ားဟာလည္း battery မွစြမ္းအင္ကိုု ရယူသုုံးစြဲေနရတဲ့အခ်ိန္ battery မ်ားရဲ ့စြမ္းအင္သိုုေလာင္နုုိင္မွုု ကိုလည္း ခ်က္ျခင္းၾကီး တိုုးတက္ေအာင္မလုပ္နုုိင္ေသးတဲ့အခ်ိန္မ်ဳိးမွာ အတက္နုုိင္ဆုုံး အဆင္ေျပေစရန္ ၄င္းတိုု ့အတြက္ ရည္ရြယ္ျပီး Bionic ကိုုထည့္သြင္းထားပါတယ္။
ခြင့္ျပဳမွုု - ၄င္းကိုု ျပဳျပင္ယူကာသုုံးလိုသူမ်ားအတြက္ အဆင္ေျပေသာ license မ်ဳိးရွိျခင္း တိုု ့ေၾကာင့္ Bionic ကိုုထည့္ထသြင္းထားပါတယ္။

Android  Run time ကိုေတာ့ JVM နဲ ့ အနည္းငယ္ ႏႈိင္းယွဥ္တင္ျပလိုတာေၾကာင့္ ေနာက္တပိုင္းမွ ေရးသားပါေတာ့မယ္။

Android အေၾကာင္း (၃) 

အားလုုံး မဂၤလာပါလိုု ့ ဦးစြာ ႏွုုတ္ခြန္းဆက္ပါရေစ။ ယခုုအပိုုင္းမွာေတာ့ က်ေနာ္ Android Run Time မွာပါ၀င္တဲ့ Dalvik Virtual Machine  ရဲ ့ အလုုပ္လုုပ္ပုံကိုု အနည္းငယ္တင္ျပေဆြးေႏြးလိုုပါတယ္။ 



Dalvik VM ဆိုုတာဘာလဲ?
Dalvik VM ဆိုုတာ ၂၀၀၅ ခုုနွစ္ေလာက္မွာ Android mobile ကိရိယာမ်ားအတြက္ အထူးသီးသန္ ့ဒီဇိုုင္းထုုတ္ျပီး Google မွ Engineer ျဖစ္သူ Dan Bornstein ဦးေဆာင္ေသာ အဖြဲ ့ က တည္ေဆာက္ထားတဲ့ Virtual Machine ျဖစ္ပါတယ္။


Java Virtual Machine  ( JVM )
ဒီေန ရာမွာ က်ေနာ္ Java Virtual Machine ကိုု Android mobile devices မ်ားအတြက္ သီးသန္ ့အထူးထုုတ္လုုပ္ထားတဲ့ထုုတ္လုုပ္ထား Dalvik Virtual Machine နွင့္ အနည္းငယ္ နွဳိင္းယွဥ္ တင္ျပလိုုတာေၾကာင့္ JVM ကိုု ဦးစြာ ရွင္းလင္းတင္ျပပါရေစ။
ေအာက္က ပုုံကိုု တခ်က္ၾကည့္ေပးပါ။





သင္ၾကိဳက္နွစ္သက္ရာText Editor (ဥပမာ -Notepad လိုုမ်ဳိး ေရးသားျပင္ဆင္နုုိင္တဲ့ ပရိုုဂရမ္တစ္မ်ဳိး) မွာ က်ေနာ္တိုု ့ Java Program တခုုကိုု ေ၇းသားနုုိင္ပါတယ္။

example HelloWorld java program
public class HelloWorld{
public static void main (String[] args){
System.out.println(“Hello World”);
}
}

က်ေနာ္တိုု ့ ဒီဥပမာ Java Program ေလးကိုုကိုု Text Editor တခုုခုုမွာေရးသားလိုုက္ပါတယ္။ ျပီးေတာ့ က်ေနာ္တိုု ့ class name နဲ ့နာမည္တူေအာင္ ေပးျပီး classname.java (HelloWorld.java) ဆိုုျပီး သိမ္းလိုုက္ပါတယ္။ ဒါကိုု က်ေနာ္တိုု ့က source code လိုု ့ ေခၚပါတယ္။ ဒီ source code file မွာ ျပင္ဆင္ခြင့္ေရးသားခြင့္ရွိပါတယ္။ အဲဒီ source code ကိုု java compiler က compile လုုပ္လိုုက္တဲ့အခါမွာ classname.class ဆိုုျပီး file တဖိုုင္က်လာပါလိမ့္မယ္။ source file ကိုု compile လုုပ္တဲ့အခါ ရရွိလာတဲ့ file ဟာ bytecodes ျဖစ္ပါတယ္။ ဒီ bytecodes ဟာ Operating System (OS ) နားလည္တဲ့ အဆင့္ေတာ့မေရာက္ေသးပါဘူး။


Source code ကိုု ေရးသားရာမွာ တခုုခုုမွားယြင္းခဲ့ရင္ compile လုုပ္တဲ့အခါမွာ errors ေတြျပပါလိမ့္မယ္။ တကယ္လိုု ့မွားယြင္းခဲ့ျပီး errors ျပခဲ့ရင္ေတာ့ bytecodes ျဖစ္တဲ့ classname.class (HelloWorld.class) ဟာက်လာမွမဟုုတ္ပါဘူး။ ဒီ errors ကိုုေတာ့ compile time errors လိုု ့ေခၚပါတယ္။ ဒီအဆင့္က ဘယ္လိုု ဥပမာေပးရမလဲဆုုိေတာ့ English Grammar ေရးသားတာနဲ ့ဥပမာေပးပါ့မယ္။ English စာမွာဆိုုရင္ စာေၾကာင္း တေၾကာင္းရဲ ့အစကိုု အၾကီးနဲ ့ေရးသားရမယ္ စာေၾကာင္း (၀ါက်) အဆုုံးမွာ full stop (.) ပါ၀င္ရမယ္။ စသည္ျဖင့္ နည္းဥပေဒေတြရွိပါတယ္။ ဒီလိုုပဲ Java programming ကိုုေရးသားရာမွာ လိုုက္နာရမည့္ syntax rules ေတြရွိပါတယ္။(ဒီအေၾကာင္းကိုု ေနာက္ပိုုင္း  Java tutorials မ်ားမွာဆက္လက္ေလ့လာနုုိင္ပါတယ္)


တကယ္လုုိ ့မွန္ခဲ့တယ္ဆိုုပါစိုု ့… classname.class (HelloWorld.class) ဖိုုင္ေလးက်လာျပီဆိုုရင္ အဲ *.class  file ကိုု Java Virtual Macnhine (JVM ) က interpret လုုပ္လိုုက္တဲ့အခါမွာ OS နားလည္တဲ့ executable file ျဖစ္ျပီး မိမိေရးသားခဲ့တဲ့ ပရိုုဂရမ္အတုုိင္း ကြန္ပ်ဴတာက လုုပ္ေဆာင္ေပးမွာပါ။ ဥပမာ program မွာ Hello World ကိုုရိုုက္ထုုတ္ဖိုု ့ေရးသားထားလိုု ့  Hello World ကိုု ရိုုက္ထုုတ္ေပးပါလိမ့္မယ္။


တကယ္လိုု ့မ်ား interpret (run)လုုပ္လိုုက္တဲ့အခ်ိန္ errors ေတြျပခဲ့ရင္ ဒါဟာ Run Time errors ပါ။ ဒါကိုု ဘယ္လိုု ဥပမာေပးရမလဲဆိုုေတာ့ က်ေနာ္တိုု ့Microsoft  World မွာ စာရိုက္တာနဲ ့ ဆင္တူပါတယ္။ MS world က်ေနာ္တိုု ့English စာ ၀ါက်ေရးသားရာမွာ စာလုုံးေပါင္းမွားရင္၊ အၾကီးအေသးမွားရင္၊ စားလုုံးထားသိုုေနရာထားမွဳ (space) မ်ားမွားတဲ့အခါ အနီေရာင္ အစိမ္းေရာင္ အတြန္ ့ကေလးေတြ ျပတာ သတိထားမိမွာပါ။ ဒါဟာ programming မွာဆိုု syntax မွားတာေပါ့။ အဲလိုုမွားျပီး Run  လိုု ့ကေတာ့ compile လုုပ္တဲ့အဆင့္မွာကိုု errors ေတြတက္မွာပါ။ တခါတေလ ကိုုေရးသားတဲ့အခါမွာ လုုံး၀ အဲလိုု အနီေရာင္ အတြန္ ့ မ်ဥ္းေလးေတြမျပ ဘူးဆိုုတိုုင္း မွန္တယ္မထင္ပါနဲ ့။ ဥပမာ က်ေနာ္က I am Aung Aung.  လိုု ့မ်ား ေရးသားခဲ့ရင္ ဘာအမွားမွ ျပမွာမဟုုတ္ပါဘူး။ ဘာလိုု ့လဲဆိုုေတာ့ ေရးသားပုုံ grammar ကမွန္ေနတာကိုုးဗ်။ ဘယ္ေနရာမွာ မွားမလဲဆိုုေတာ့ က်ေနာ့္ကိုုသိတဲ့လူေတြဖတ္တဲ့အခါ ဟ မင္းက Aung Aung မဟုုတ္တာYe’ Paing Phyo ပါကြဆိုုျပီးျပန္ေျပာပါလိမ့္မယ္။ ဒါမ်ဳိးကိုု Run Time errors လိုု ့ေခၚပါတယ္။ ဒီေနရာမွာ compile time errors နွင့္ run time errors ကိုု ရွင္းလင္း နားလည္ေစခ်င္တာပါ။


JVM ဟာ OS platform အေတာ္မ်ားမ်ားအတြက္ ရရွိနုုိင္တာမိုု ့ Java ဟာ platform လြတ္လပ္မွဳရွိတယ္လိုု ့ဆိုုနုုိင္တာေပါ့။ ဒါေၾကာင့္ သင္ဟာ Windows OS မွာ compile လုုပ္ထားတဲ့ HelloWorld.class ဖိုုင္လ္ ကိုု JVM တင္ထားတဲ့ ၾကိဳက္တဲ့ OS မွာ interpret လုုပ္နုုိင္ျပီေပါ့။


အားလုုံးကိုု ျပန္ျခဳံငုုံ ေျပာရရင္ေတာ့ Text editor တခုုခုုမွာ java program (classname.java) ေရးသားထားတဲ့ source code ကိုု compile လုုပ္တဲ့အခါ byte codes (classname.class) ရပါတယ္။ အဲ .class file ကိုု JVM က interpret လုုပ္လိုုက္မွ OS နားလည္တဲ့  executable file/program ရလာတာပါ။


Dalvik VM ကိုု ရွိနွင့္ျပီးသား Java Virtual Machine (JVM ) ထက္ပိုုမိုုေကာင္းမြန္ေအာင္၊ အထူးသျဖင့္ ၾကိဳးမဲ့မိုုဘိုုင္းကိရိယာမ်ားအတြက္ ရည္ရြယ္ ဖန္တီးထုုတ္လုုပ္ထားျခင္းျဖစ္ပါတယ္။ Mobile device ေတြဟာ သယ္ယူရ အဆင္ေျပလြယ္ကူေစရန္ အရြယ္အစား အားျဖင့္ ေသးငယ္ေအာင္ ထုုတ္လုုပ္ရတာ ျဖစ္တဲ့အတြက္ Battery life, processign power, memory management ျပႆနာေတြကရွိေနဆဲျဖစ္ပါတယ္။ Dalvik ကိုု အဓိကအားျဖင့္  battery life ၾကာခ်ိန္နွင့္ ေမာင္းနွင္တြက္ခ်က္နုုိင္စြမ္းအား processing power တုုိ ့ကဲ့သိုု ့ေသာ mobile devices မ်ား၏ အကန္ ့အသတ္မ်ားအတြက္ အဆင္ေျပေစရန္ ဒီဇုုိင္းထုုတ္ထားတာျဖစ္ပါတယ္။


၂၀၀၅ ခုုနွစ္ေလာက္မွာ Google က Dan Bornstein ဦးေဆာင္တဲ့ Engineer အဖြဲ ့ဟာ Dalvik VM ျဖင့္ JVM ကိုု အစားထုုိးနုုိင္ဖိုု ့အသည္းအသန္ က်ားကုုတ္က်ားခဲ ၾကိဳးပန္း ဖန္တီးရလဲဆိုုတာ ေနာက္ကြယ္ မွာအေၾကာင္းအရင္း တခုုရွိေနေသးလိုု ့ပါပဲ။ ဒါဆိုု အဲဒါဘာမ်ားျဖစ္မလဲ? LICENSE ခြင့္ျပဳမွဳ ကိစၥေၾကာင့္ျဖစ္ပါတယ္။ အမွန္တကယ္ေတာ့ Java Programming Language, Java tools and Java Libraries ေတြဟာ  မည္သူမဆိုု ရယူသုုံးစြဲနုုိင္ေသာ (Open Source) ဆိုုေပမယ့္ Java Virtual Machie (JVM) ကေတာ့ Free မဟုုတ္ပါဘူး။ ဒီကိစၥကလဲ Dalvik ျဖစ္ေပၚလာေစတဲ့အေၾကာင္းရင္း တရပ္ပါပဲ။ ဒါေပမယ့္လည္း ခုုခ်ိန္ခါမွာေတာ့ Sun အဖြဲ ့ၾကီးမွ Java ျဖင့္တည္ေဆာက္ထားေသာ VM ကိုု အစားထိုုးစရာအျဖင့္ Open JDK နွင့္ Apache Harmony တိုု ့လည္းရွိေနျပီျဖစ္သည္။ ဒီေန ရာမွာသတိထားမိရမွာက လူသားေတြရဲ ့တီထြင္ဖန္တီးလိုုမွဳျဖစ္ပါတယ္။ Open Source အဖြဲ ့စည္းေတြဟာ ကန္ ့သတ္မွုုေတြကိုုေက်ာ္လႊားနုုိင္ဖိုု ့ အသစ္တီထြင္ဖန္တီးနုုိင္ဖိုု ့ကိုု အျမဲတမ္းၾကိဳးစားၾကပါတယ္။ လူသားေတြရဲ ့တီထြင္ဖန္တီးမွဳဟာလဲ အကန္ ့သတ္ေတြမရွိတဲ့အခါ ပိုုမိုုေတာက္ေျပာင္လာအုုံးမွာပါပဲ။


Dalvik VM & Java VM
Java မွာ source file ကို text editor  တခုုခုုမွာေရးသားျပီး java compiler ( javac HelloWorld.java) ကိုုသုုံးျပီး Java byte codes အျဖစ္ ေျပာင္းလဲကာ compile လုုပ္ပါတယ္။ ထိုု ့ေနာက္ Java byte code ကိုု Java VM  ေပၚတြင္ run (java HelloWorld) ယူသည္။ Android OS ေပၚတြင္မွုု မတူေတာ့သည့္ ကိစၥမ်ားရွိလာသည္။  source file (*.java) ကိုု compiler ျဖင့္ java byte codes (*.class) ဖိုုင္ရယူသည္အထိက အတူတူုုျဖစ္ပါတယ္။ သိုု ့ေသာ္ ထိုုအဆင့္တြင္ Dalvik  compile ကိုု ထပ္ျဖတ္ျပီး Dalvik byte code အျဖစ္ ထုုတ္ယူျပီး ရရွိလာတဲ့ Dalvik byte code ကိုုမွ Dalvik VM ေပၚတြင္ အလုုပ္လုုပ္ေစျခင္းမ်ဳိးျဖစ္ပါတယ္။




က်ေနာ္ တိုု ့ဒီေန ရာမွာ သတိထားရမွာက Dalvik byte code ရေအာင္ java က ေန တိုုက္ရိုုက္မထုုတ္ယူပဲ Dalvik compiler ကိုု တဆင့္ခံသုုံးထားတယ္ဆိုုတာကိုုပါ။ ဒီလိုု တဆင့္ခံသုုံးထားတာေၾကာင့္ အက်ဳိးဆက္မ်ား ျဖစ္လာပါတယ္။ ဥပမာ- java byte code ျဖစ္ေစတဲ့ ( Python/ Ruby စသည့္) မည္သည့္ programming language မဆိုု Android Application မ်ား ေရးသားနုုိင္သြားျခင္းမ်ဳိးျဖစ္သည္။
Java မွာ အဓိကအားျဖင့္ေအာက္ပါအတုုိင္း …


  • Java Standard Edition (J2SE) – Desktop application မ်ားေရးသားရာတြင္ အသုုံးျပဳသည္။
  • Java Enterprise Edition ( J2EE) – Enterprise System , e-Commerce ကဲ့သိုု ့ေသာ လုုပ္ငန္းၾကီးမ်ား အတြက္ application မ်ားေရးသားရာတြင္ အသုုံးျပဳသည္။
  • Java Micro Edition (J2ME/ Java ME) – java phone မ်ား mobile application မ်ားအတြက္ျဖစ္သည္။

Android တြင္ ပါ၀င္ေပါင္းစပ္ေသာ java libraries မ်ားမွာ  Java Standard Edition နွင့္အနီးစပ္ ဆုုံးျဖစ္သည္။ ၄င္းတိုု ့၂ ခုု၏ အဓိက ကြာျခားေသာ အခ်က္မွာ J2SE မွ user interface libraries ကိုု ဖယ္ထုုတ္လိုုက္ျပီး Android အဓိက user interface librarires မ်ားကိုုျဖည့္သြင္းထားျခင္းျဖစ္သည္။ သိုု ့ေသာ Java ၏ standard features မ်ားကိုု ေထာက္ပံ့ေပးထားသည္နွင့္ တျပိဳင္နက္တြင္ features အသစ္မ်ားကိုုလည္း Android  တြင္ ျဖည့္စြက္ ထည့္သြင္းထားေပးပါသည္။ ေနာက္ တပိုုင္းမွပဲ Application Framework မ်ား ႏွင့္ပတ္သက္ျပီး ဆက္လက္ေဆြးေႏြးပါေတာ့မယ္။ 
 
Android အေၾကာင္း (၄) - - - - -

ပထမေတာ့ က်ေနာ္ Android SDK & Java SDK installation လုုပ္ပုုံ နဲ ့Hello World Program တခုုေရးျပီး မိတ္ဆက္ မလိုု ့ပါပဲ။ ဒါေပမယ့္ Android အေၾကာင္းကိုု ပိုုျပီးနက္နက္နဲနဲသိေစခ်င္တာနဲ ့ဒါေလးေရးျဖစ္သြားတာပါ။

ယခုုအပိုုင္းမွာ Activities ေတြအေၾကာင္းကိုု ေျပာခ်င္ပါတယ္။ ၄င္းဟာ ဘယ္ေလာက္အေရးၾကီးေၾကာင္း မေျပာလိုုေပမယ့္ ေလ့လာဖတ္ရႈ႔ရင္းနဲ ့Mobile device ေတြအတြက္ အသက္တခုုပဲဆိုုတာ သေဘာေပါက္လာမယ္ထင္ပါတယ္။



Activities ဆိုုတာဘာလဲ?
Activity ဆိုု Android Application တခုုရဲ ့component တခုုလိုု ့ေျပာလိုု ့ရပါတယ္။ အလြယ္ဆုုံးေျပာရရင္ အသုုံးျပဳသူ (user) ဟာ Application တခုုကိုုသုုံးေနတဲ့အခ်ိန္မွာ Screen ေပၚမွာေပၚေနတာ ျမင္ေနရတာကိုု Activity တခုုလိုု ့ေျပာလိုု ့ရပါတယ္။ ဥပမာ က်ေနာ္ကသူငယ္ခ်င္းတစ္ေယာက္ရဲ  ့ ဆက္သြယ္ရန္လိပ္စာ (Contact Address) တခုုကိုုေရးမွတ္ေနတယ္ဆိုုပါစိုု ့။ အဲဒီအခ်ိန္မွာ ျမင္ေနရတဲ့ screen ဟာ Activity တခုုပါ။ Application တခုုမွာ Activities ေတြအမ်ားၾကီးရွိနုုိင္ပါတယ္။ ျပီးေတာ့ က်ေနာ္တိုု ့ကလဲ Activities ေတြကိုု တခုုကေန တခုုကိုု  အျပန္အလွန္ ကူးေျပာင္းအသုုံးျပဳေနပါတယ္။ user နဲ ့လုုံး၀ interaction ရွိတဲ့သေဘာပါ။

ဒါကိုု လြယ္ကူတဲ့ ဥပမာ တခုုေပးရမယ္ဆိုုရင္ က်ေနာ္တိုု ့Website ၾကည့္ရႈ အသုုံးျပဳခ်င္းနဲ ့ ဥပမာျပနုုိင္ပါတယ္။ က်ေနာ္တုုိ ့website တခုုကိုု ၾကည့္ရႈ အသုုံးျပဳတဲ့အခါမွာ ၄င္းမွာ webpage ေတြအမ်ားၾကီးရွိတာ သတိထားမိမွာပါ။ ဒီ Webpage ေတြကိုု က်ေနာ္တိုု ့က activities  ေတြအျဖင့္ ျမင္ၾကည့္ရေအာင္လား။ ျပီးေတာ့ က်ေနာ္တိုု ့Webpage တခုုကေန တခုုကိုု ဟိုုသြားလိုုက္ ဒီသြားလိုုက္နဲ ့လွည့္ပတ္ၾကည့္ရႈၾကပါတယ္။ Website တခုုမွာ Home Page ရွိသလိုုပဲ က်ေနာ္တိုု ့ရဲ ့Android app တခုုမွာလဲ main activity ဆိုုတာရွိပါတယ္။ Main Activity ဟာ က်ေနာ္တိုု ့application ကိုု စတင္ launch လုုပ္လိုုက္တဲ့အခါ ေပၚလာတဲ့ screen ေပၚျမင္ရတဲ့ activity ပါပဲ။ Website ေတြမွာ Webpage အခ်င္းခ်င္း Links ျဖင့္ ခ်ိတ္ဆက္ညႊန္းတာသတိထားမိမွာပါ။ ဒီလိုုပါပဲ Android app ေတြမွာလဲ activity တခုုကေန တခုုကိုု ခ်ိတ္ဆက္ အလုုပ္လုုပ္ေနပါတယ္။ ဥပမာ က်ေနာ္က ဓါတ္ပုုံရုုိက္တဲ့ application ကိုုသုုံးေနတယ္ ရိုုက္ျပီးေတာ့ save လုုပ္တယ္။ ေနာက္ Edit လုုပ္ခ်င္ရေသးတယ္ အဲလိုု တခုုကေနတခုုကိုု ကူးေျပာင္းခ်ိတ္ဆက္ေနတာကိုုဆိုု လိုုခ်င္တာပါ။ ေနာက္ျပီး Website တခုုကေနျပီး အျခား website တခုုကိုု Link ခ်ိတ္ဆက္ျပီး ညႊန္းတာကိုုလဲ သတိျပဳမိမယ္ထင္ပါတယ္။ ဒီလိုုပါပဲ  Android app တခုုကေန တခုုကိုု ေျပာင္းလဲခ်ိတ္ဆက္ကာ ေခၚယူအသုုံးျပဳနုုိင္ပါတယ္။ က်ေနာ္ တိုု ့Facebook application တခုုကိုုသုုံးေနတယ္ဆိုု ပါစိုု ့။ က်ေနာ္တိုု ့ဓါတ္ပုုံတင္ခ်င္တယ္ဆိုု camera application ကိုုခ်ိတ္ဆက္ျပီး ခုုဏရိုုက္ထားတဲ့ပုုံကိုု တင္မလား ဒါမွမဟုုတ္ အသစ္ရိုုက္မလားဆိုုျပီး application တခုုကေနတခုုကိုု ေျပာင္းလဲ ခ်ိတ္ဆက္ကာ ေခၚယူအသုုံးျပဳပါတယ္။

 ေနာက္ ဥပမာ တခုုေပးရလ်ွင္ camera application မွာ ဓါတ္ပုုံကိုု email ပိုု ့ရန္အတြက္ mail app တခုုကိုုေခၚသုုံးသည္။ ထိုု mail app မွ mail ပိုု ့မည့္ လိပ္စာအတြက္ contact book app မွ contact list ကိုုရယူအသုုံးျပဳသည္။ ဒီလိုု အသစ္အသစ္ ေသာ activity ေတြဟာ user ရဲ ့interact ေပၚမူတည္ျပီးေျပာင္းလဲေနပါတယ္။ Activity တခုုအသစ္ေပၚလာတုုိင္း အရင္အသံုုးျပဳခဲ့တဲ့ Activity ဟာ pause state ျဖစ္သြားပါတယ္။ ဘာေၾကာင့္လဲဆိုုေတာ့ mobile မွာ screen ေသးေလး တခုုသာ ပိုုင္ဆိုုင္တာေၾကာင့္ တခုုနဲ ့တခုုကိုု အစားထိုုးျပသေနရတာ ေၾကာင့္ပဲျဖစ္ပါတယ္။


Activity Life Cycle
-------------------------

က်ေနာ္တိုု ့Android Application တခုုကိုု ပထမဆုုံး စဖြင့္လိုု္က္ျပီဆိုုပါစိုု ့။ ဒါActiviy တခုုကိုု mobile device မွာ launch လုုပ္လိုုက္ျခင္းျဖစ္ပါတယ္။ ဒီလိုုလုုပ္လုုိက္တဲ့အခါမွာ Mobile OS ေပၚမွာ Linux Process တခုုကိုုဖန္တီးရယူျခင္း၊ User Interface Object မ်ားအတြက္ Memory ကိုု ဖဲ့ယူသုုံးစြဲရျခင္း Screen တခုုလုုံးကိုု Set up လုုပ္ရျခင္း စသည္ျဖင့္ activity ျဖစ္လာဖိုု ့ဒီလိုု Resource ေတြ မ်ွယူသုုံစြဲရပါတယ္။ ယခုုလိုု အဆင္ဆင့္ ဖန္တီးထားတဲ့ actvity ဟာ ခဏေလး သာ ၾကည့္ဖိုု ့ျဖစ္သြားပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ အသုုံးျပဳသူ (user) ဟာ ေနာက္ activity တခုုကိုု ကူးေျပာင္းသြားမွာျဖစ္ပါတယ္။ အသုုံးျပဳသူ ကလဲ ေနာက္ထပ္ အသစ္သစ္ေသာ activity ကိုုသာ ကူးေျပာင္း ကာသံုုးစြဲေနမွာျဖစ္ပါတယ္။ ဒီလိုု အဆင့္အဆင္ ဒုုကၡခံ ဖန္တီးထားတဲ့ activity ေတြဟာ ခဏၾကည့္ျပီး ျပန္ပိတ္ ျပန္ျပီးဖြင့္ ေနရရင္ Mobile ရဲ ့စြမ္းေဆာင္ရည္နဲ့ကေတာ့ လုုံး၀ မျဖစ္နုုိင္ေတာ့တာ အေသခ်ာပါပဲ။ ဒီလိုု ေတြ ျဖစ္ပ်က္ ျဖစ္ပ်က္ျဖစ္ေနတဲ့ Activity Life Cycle ကိုု ့Activity Manager ျဖင့္ ထိန္းခ်ဳပ္ရပါတယ္။


What is Activity Manager?

Activity Manager ဆိုုတဲ့အတုုိင္း Component Activity ေတြကိုု စီမံခန္ ့ခြဲပါတယ္။ Activity Manager က Activities မ်ားကိုု ဖန္တီးျခင္း၊ ဖ်က္သိမ္းျခင္း ထိန္းခ်ဳပ္ စီမံခ်င္းမ်ားကိုု လုုပ္ေဆာင္ပါတယ္။ က်ေနာ္တိုု ့ app တခုုကိုု စျပီး ဖြင့္လိုုက္ျပီဆိုုတာနဲ ့ Activity Manager ဟာ Activity တခုုကိုု ဖန္တီးလိုုက္ျပီး Screen ေပၚကိုု တင္ေပးလိုုက္ပါတယ္။ ေနာက္ က်ေနာ္တိုု ့ေနာက္ထပ္ Activity တခုကိုု ကူးေျပာင္းတဲ့အခါ Activity Manager ဟာ ပထမ activity ကိုု ခတၱ သိမ္းရာ Holding Place ေပၚတင္လိုုက္ျပီး ေနာက္ထပ္ activity တခုုကိုုဖန္တီးေပးပါတယ္။ တကယ္လိုု ့အသုုံးျပဳသူဟာ ယခင္ Activity ကိုု ျပန္သြားပါက အစအဆုုံးျပန္လည္ ဖန္တီးေနစရာမလိုုတဲ့အတြက္ ပိုုမိုု ျမန္ဆန္စြာ launch လုုပ္နုုိင္မွာပါ။ activity ေတြဟာ Pause state မွာရွိေနေပမယ့္လဲ Memory ကိုုေတာ့အနည္းနဲ ့အမ်ားကေတာ့ ယူသုုံးေနအုုံးမွာျဖစ္ပါတယ္ ဒါေၾကာင့္ မလိုုအပ္ေတာ့ဘူးလိုု ့ထင္တဲ့ မသုုံးတာ ၾကာတဲ့ Activity ေတြကို AM ကေန ဖ်က္သိမ္း( destroy ) လုုပ္လိုုက္ပစ္ပါတယ္။ ထိုု ့ေၾကာင့္ memory Free space ပိုုမုုိ ရရွိလာျပီး Performace ပိုုမိုုေကာင္းမြန္လာမွာျဖစ္ပါ
တယ္။ UI ရဲ ့ speed လဲသိသာစြာေကာင္းမြန္တိုုးတက္လာပါတယ္။ ဒါဟာ Activity Manager ရဲ ့အက်ဳိးေက်းဇူးေတြေပါ့။


Starting State
-----------------
Starting State ဆိုုတာ mobile device ရဲ ့Memory ေပၚမွာ app မရွိေသးဘူးဆိုုတ့ဲသေဘာပါပဲ။ app တခုုကိုု စဖြင့္လိုုက္တဲ့ သေဘာေပါ့။ အဲခ်ိန္မွာ callback Method အမ်ားၾကီး တျပိဳင္ထဲ run ေလ့ရွိတဲ့အတြက္ developer အေနနဲ ့callback method မ်ားကိုု ၾကိဳတင္ျပင္ဆင္နုုိင္ခြင့္ရွိပါတယ္။ ဒီလိုုအဆင့္ေတြျပီးရင္ေတ့ Running state ကိုု ေရာက္သြားပါျပီ။
ဒီလိုု starting state ကေန running state ကိုုေရာက္ဖိုု ့အတြက္ computing power ကို OS နဲ ့အတူ သုုံးစြဲပါတယ္။ ဒီလိုုပဲ Battery ကိုုလဲ အတူအသုုံးျပဳၾကတယ္။ computing time ဘက္ကၾကည့္မယ္ဆိုု အေတာ့္ကိုုသုုံးစြဲတဲ့အခ်ိန္ေပါ့။ က်ေနာ္တိုု ့app တခုုရဲ ့activity တခုုကိုုသုုံးေနျပီး ေနာက္တခုုကိုု ကူးေျပာင္းတဲ့အခါ ပထမ activity က holding place ေပၚေရာက္သြားတာ အေပၚမွာေျပာခဲ့ပါတယ္။ ဘာေၾကာင့္ တခါတည္း destroy မလုုပ္ဘဲ ဒီေနာက္ကြယ္က activity ေတြခ်န္ထားရလဲ ဆိုုေတာ့ staring state ကေန running state ကိုုေရာက္ဖိုု ့ Resource ေတြအရမ္းသုုံးရတယ္။ ကရိကထ နုုိင္တယ္ဆိုုရမွာေပါ့။ user က သူျပန္သုုံးတဲ့အခါ ဒီလိုုသာ အစအဆုုံးျပန္ျပီး စေနရရင္  Performace ပိုုင္းအရ ျပႆနာ ရွိေနျပီေပါ့။ ဒါေၾကာင့္ တခါတည္း Destroy မလုုပ္ပဲ ခ်န္ထားတာပါ။

Running State
---------------------
တခါတေလ Focus activity လိုု ့ေခၚေလ့ရွိပါတယ္။ က်ေနာ္တိုု ့Android app တခုုခုုကိုု အသုုံးျပဳေနတဲ့အခ်ိန္ က်ေနာ္တိုု ့စာရိုုက္ေနတာလဲျဖစ္မယ္ Website ၾကည့္ေနတာလဲျဖစ္မယ္၊ ဓါတ္ပုုံရိုုက္ေနတာလဲျဖစ္မယ္၊ အဲလိုုခ်ိန္မွာ User နဲ ့လုုံး၀ Interact ရွိေနပါတယ္။ User သုုံးေနတဲ့ Activity ကေတာ့ Focus Activity ပါပဲ။ အဲလိုုခ်ိန္မ်ဳိးမွသူက Focus ျဖစ္ေနတဲ့အတြက္ Memory နွင့္ အျခား Resource မ်ား ေတြကိုု လက္၀ါးၾကီးသိမ္းပိုုက္ထားတဲ့အခ်ိန္ေပါ့။ ဒီခ်ိန္မွာ သူက ခရာက်တယ္ေလ။ ဒါေပမယ့္ အခ်ိန္တခ်ိန္မွာ Running State Focus Activity တခုုပဲရွိပါတယ္ ဘာလိုု ့လဲဆိုုေတာ့  အသုုံးျပဳသူက ေနာက္ထပ္ Screen တခုုကိုုေျပာင္းလဲ သုုံးျပဳတာနွင့္တျပိဳင္နက္ ပထမ Activity လိုု ့ ဟာ Focus မဟုုတ္ေတာ့ပါဘူး။ သူက Pause State ကိုု ေျပာင္းလဲသြားရတယ္။ ဒါေတြအားလုုံးကိုု Activity Manager က ေကာင္းေကာင္း ေနာက္ကြယ္ကလုုပ္ေဆာင္ေပးေနတာပါ။

တခါတေလလဲ Running state Focus  Activity ဆိုုတိုုင္း အရမ္းၾကီး အလုပ္ရွုုတ္ေနတဲ့ activity လို ့တရားေသ မယူဆ ေစခ်င္ပါဘူး။ တခါတေလ running focus activity ေတာင္မွ user ဆီက input ကိုုေစာင့္ဆိုုင္းေနရတဲ့ အခ်ိန္  အဲလိုုမ်ဳိး အခိုုက္အတန္  ့မ်ိဳးလဲ ရွိတက္တာပဲေလ။ ဒီလိုုပဲ
stopped state မွာရွိေနတဲ့ activity ဟာလဲ ဘာမွ အလုုပ္မလုုပ္ေတာ့ လိုု ့ပုုံေသကားျခပ္ ေျပာလိုု ့မရနုုိင္ပါဘူး။ ဒီလိုုသတ္မွတ္ဖိုု ့ဆိုုတာက activty ဟာ focus state တြင္ရွိျခင္း မရွိျခင္း screen ေပၚတြင္ ရွိျခင္းမရွိုုခင္းတိုု ့ အေပၚမွာသာ အေျခခံျခင္းျဖစ္ပါတယ္။

 
Pause Statement
---------------------

အေပၚမွာ ေဆြးေႏြးခဲ့သလိုုပဲ တကယ္လိုု ့Activity တခုုဟာ Focus အဆင့္ သုုံးေနတဲ့အဆင့္မွာမဟုုတ္ေတာ့
ရင္ေတာင္မွ Screen ေပၚမွာရွိေနေသးပါတယ္။  Pause State မွာေတာ့ Resources ေတြကေတာ့ ၄င္း activity အတြက္ ဦးစားေပးအဆင့္တြင္ပင္ရွိပါေသးသည္။ ဘာေၾကာင့္လဲဆိုုေတာ့ ၄င္းကိုု လုုံး၀ဖ်က္သိမ္းလိုုက္ျခင္းမရွိေသးေသာေၾကာင့္ျဖစ္ပါသည္။

Stopped State
-------------------
၄င္း အဆင့္မွာ Activity ဟာ Screen ေပၚမွာရွိမေနေတာ့ေပမယ့္ Memory ရဲ ့ေနရာတခုုမွာေတာ့ရွိေနပါေသးတယ္။ Pause state ေလာက္ ဦးစားေပး အဆင့္မဟုုတ္ရင္ေတာင္ Stopped Activity ဟာ လက္ရွိ အလုုပ္လုုပ္ေနဆဲ Running Focus state Activity တခုုက ေခၚယူတဲ့အခါမွာ Focus Activity တခုုအျဖင့္ Screen ေပၚသိုု ့ျပန္လည္ေရာက္ရွိလာနုုိင္ပါေသးတယ္။ ဒီလိုုမွမဟုုတ္ဘဲ ေခၚယူသုုံးစြဲမွုု မရွိဘူး မရွိနုုိင္ေတာ့ဘူးလိုု ့ Activity Manager ထင္ရင္ လုုံး၀ destroy လုုပ္ျပီး Memory ေပၚက ဖယ္ရွားလိုုက္ပါတယ္။ Memory ေပၚမွာ Free space လိုုအပ္မွုုေပၚကိုုၾကည့္ျပီး AM က အလုုပ္လုုပ္ေဆာင္ေပးေနတာပါ။

ဥပမာ တခုုေပးရမယ္ဆိုုရင္ ျပဇာတ္ပြဲ တခုုဆိုုပါစိုု ့။ ပထမဆုုံး ပြဲထြက္ဖိုု ့ေတာ္ေတာ္ၾကာတယ္ဗ်။ က်ေနာ္ကေတာ့ဘယ္သူပါ ဘာသီခ်င္းဆိုုမွာဘာညာနဲ ့အခ်ိန္ေတာ္ေတာ္ၾကာတယ္ ဒါ Android App တခုုကိုု Launch လုုပ္လိုုက္တာနဲ ့ဆင္တယ္။ ။ state စင္ျမင့္ ကိုု Screen လိုု ့ယူစလိုုက္ပါ။ စင္ျမင့္ ေပၚမွာကျပ အသုုံးေတာ္ခံ (performance) လုုပ္ေနတဲ့သူက Running state focus activity ေပါ့။ အဲခ်ိန္ ၾကည့္ရွဳ ့ေနတ့ဲ မင္းပရိ္တ္သတ္နဲ ့တသားထဲၾကေနတာ user က activity တခုုနဲ ့ interact လုုပ္ေနတဲ့နဲ ့ဆင္တူပါတယ္။။ အဲသူ ကျပလိုု ့ျပီးေတာ့ ခဏ နားပါတယ္။ ေနာက္တစ္ေယာက္ က စင္ျမင့္ေပၚမွာေဖ်ာ္ျဖည္ေပါ့။ အဲခ်ိန္မွာ ပထမကတဲ့လူက ကလကာ ရဲ ့ေနာက္မွာ အက်ၤ ီလဲ ခဏနားေပါ့ဗ်ာ။ သူ ့ကိုု Pause state လိုု ့ေျပာလိုု ့ရတယ္ သူ Memory ေပၚမွာပဲရွိေသးတယ္ေလ သူျပန္ေဖ်ာ္ျဖည္ဖိုု ့အဆင္သင့္ျဖစ္ေနတဲ့အေနထားေပါ့။ သူအလွည့္ သူျပန္ ကျပမယ္ေပါ့။ တကယ္လိုု ့သူကျပဖိုု ့တာ၀န္ျပီးျပီဆိုု ရင္  သူအ၀တ္လဲျပီး နားေကာင္းနားမယ္ ကပြဲကိုုပရိတ္သတ္နဲ ့အတူၾကည့္ခ်င္ၾကည့္ေနမယ္။သူ ကဇာတ္ရုုံကေန အိမ္ျပန္သြားရင္ေတာ့ ဒါdestroy  state ကိုုေရာက္သြားတာပါ။ က်ေနာ္တိုု ့အေပၚမွာေျပာခဲ့သလိုုဆိုု သူကိုုမလိုုအပ္ေတာ့လိုု ့Stopped လုုပ္ျပီး memory ေပၚကေနလုုံး၀ဖယ္ရွားလိုုက္တာပါ။ တကယ္လိုု ့destroy လုုပ္ျပီးမွ ျပန္ေခၚမယ္ဆိုု အစအဆုုံး Launch ျပန္လုုပ္ရမွာမိုု ့Resource ေကာ အခ်ိန္ေကာ ေပးရမွာေပါ့။ အိမ္ကလူ ျပန္ေခၚျပီး လာျပန္ကဆိုုသလိုုျဖစ္ေနမယ္ထင္
တယ္။


Destroy State
-------------------
ဒီအဆင့္မွာေတာ့ destroy လုုပ္လိုုက္ျပီးတဲ့ activity ဟာ memory ေပၚမွာ မရွိေနေတာ့ပါ။ AM က မလိုုအပ္ေတာ့ဘူးထင္လိုု ့သူက Activity လုုံး၀  ဖ်က္သိမ္းလိုုက္တာျဖစ္ပါတယ္။ Developer တစ္ေယာက္အေနနဲ ့ ကိုုယ္ေရးသားမယ့္ app တခုုမွာ save process ကိုု pause state မတိုုင္ခင္ေရးသားသင့္တယ္လိုု ့က်ေနာ္ထင္ပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ app တခုုရဲ  ့component activity ကိုု destroy မလုုပ္ခင္ မသိမ္းဆည္း ရေသးတဲ့ အခ်က္အလက္ data ေတြကိုု သိမ္းဆည္းပါတယ္။ ဒါေပမယ့္ တခါတေလမွာေတာ့ pause state မွာ ရွိတဲ့ activity ဟာလဲ destroy လုုပ္ခံရနုုိင္ပါတယ္။ ဒါေၾကာင့္ အေရးပါတဲ့ save process ကိုု pause state မတိုုင္ခင္ေရးသားသင့္တယ္လိုု ့ က်ေနာ္ထင္ပါတယ္။

ေနာက္တပိုုင္းက်မွာပဲ Intent မ်ား Content Providers မ်ား Background service မ်ားအေၾကာင္းကိုု ေ၀မ်ွေရးသားလိုုပါတယ္။
 
Post By: Ye` Paing Phyo
http://www.m51a.com/

No comments:

Post a Comment