Tech

Huawei C8650 Firmware

စိတ္ၾကိဳက္တာသံုး 






Huawei G300 U8818 Firmware




http://madmodder.co.uk/category/huawei/cdma-phones/c8812


  1. Free Code Converter/Phraser
ဒါကေတာ့ phrase Adsense ad code နဲ႕အျခားေသာ HTML/JAVA codesေတြကိုဘေလာ့ေပၚမွာတင္ရန္ကူညီေပးႏိုင္ပါတယ္။
1. http://www.blogcrowds.com/resources/parse_html.php
2. http://www.eblogtemplates.com/blogger-ad-code-converter/
2. Free ClipArt
ဒီေနရာေတြမွာအခမဲ့ clip art images ေတြကိုရွာျပီးသံုးႏိုင္ပါတယ္။
1. http://www.wpclipart.com/browse.html
2.http://free-clipart.net/3. http://office.microsoft.com/en-us/images/
4. http://www.free-graphics.com
3. Icons for RSS Feeds
 RSS feed အတြင္ Icon ေလးေတြယူသံုးခ်င္ရင္။
1. http://www.hongkiat.com/blog/free-rss-feed-icons-the-ultimate-list/
2. http://www.feedicons.com/
3. http://www.toxel.com/design/2008/08/13/collection-of-free-rss-feed-icons/
4. Free Image Watermark
မိမိရဲ႕ဓါတ္ပံုေတြကို online ကေနျပီးအမ်ိဳးမ်ိဳးျပဳျပင္ခ်င္ရင္။
1. http://picmarkr.com/
2. http://www.picture-shark.com
3. http://www.watermarktool.com/
5. Favicon Generator
ဒါကေတာ့ဘေလာ့နဲ႕ဝဘ္ဆိုက္ဒ္အတြက္ favicon လုပ္ရင္ဆိုက္ဒေကာင္းေလး။
1. http://tools.dynamicdrive.com/favicon/
2. http://www.favicon.cc/
3. http://www.degraeve.com/favicon/ (It creates,edit and generate the favicon)
6. Free HTML Tutorial
အေကာင္းဆံုး HTML ကုဒ္ေတြကိုလြယ္ကူစြာသင္ယူခ်င္ရင္.
1. http://www.2createawebsite.com/build/html.html
2. http://www.htmlcodetutorial.com/
3. www.w3schools.com/
7. Online Free File Storage
ဒါေလးကေတာ့ Online ေပၚမွာမိမိရဲ႕ Fileေတြကိုသိမ္းထားခ်င္ရင္ေပါ့ေနာ္။
1. http://filefactory.com/ (free up to 300MB)
2. http://skydrive.live.com/ (25GB)
3. https://www.box.net/ (1GB)
8. HTML Color code picker
ဒါကေတာ့ HTML value of a specific color ေတြေပါ့္ေနာ္
1. http://www.blogger-help.com/2009/02/get-html-color-code-values.html
9. Reveal exact color of HTML color code
အျခားေတာ့ HTML color code e.g. #CCCCCC ေတြကိုရႏိုင္ပါတယ္။
1. http://www.colorcombos.com/CCCCCC-hex-color
10. Social Bookmarking and Sharing
ဒါေလးကေတာ့add social bookmarking နဲ႕ sharing icons အတြက္ပါ။
1. http://addthis.com/
2. http://www.socialmarker.com/
3. http://sharethis.com/
11. Free website statistics
1. http://www.google.com/analytics/index.html
12. Free buttons and logo's
လွလွပပ Buttons ေတြနဲ႕ Logo ေတြအတြက္အသံုးဝင္တဲ့ဆိုက္ဒ္ေကာင္းေလးပါ။
1. http://www.buttonator.com/
2. http://www.simwebsol.com/ImageTool/
3. http://www.mycoolbutton.com/


မသိေသးတဲ႔မိတ္ေဆြေတြကိုအသိေပးမ်ွေဝေစခ်င္ပါတယ္၊
ဘေလာ့ဂါမိတ္ေဆြအားလံုးကိုအစဥ္ျမဲခ်စ္ခင္ေလးစားလၽွက္ kp3မိသားစု

ဦးျမင့္ေက်ာ္သူတုိ႕အုပ္စု..... မွ်ေ၀ေပးတဲ႕ Myanmar Mobile App Store ကို ေခ်ာက္တြန္းခ်င္တယ္။ ေနာက္ကုိ cracked မတင္ေအာင္လုပ္ေဆာင္တာလုိလုိဘာလုိလုိနဲ႕ facebook ေပၚမွာ site ကုိ နာမည္ပ်က္ေအာင္ တက္ဖြတယ္ (မတင္ေစခ်င္ေသာ software ကုိဖ်က္ေပးရန္ အဆင့္တန္းတန္းရွိရွိလူၾကီးလူေကာင္းပီသစြာ mail ပုိ႕ဆက္သြယ္မႈမ်ိဳးတစ္ခါမွပင္မရွိခဲ့ပါ။ အခြင့္အေရးရတာနဲ႕ေခ်ာင္ပိတ္ရုိက္ဖုိ႕သာျပင္ဆင္ထားၾကသည္ )
္facebook စာမ်က္ႏွာအမ်ားအျပားတြင္ site ကုိထိခုိက္ေအာင္ Screen shot ေတြလုပ္ျပီးလုိက္ျဖန္႕တယ္။
ဒီကိစၥနဲ႕မပတ္သက္ေသးတဲ့ ျမန္မာdeveloper ေတြနဲ႕ရန္ပတ္တိုက္ေပးေနတယ္ ။ အစက အခေၾကးေငြျဖင့္ ၀ယ္ရတဲ့ cracked app မ်ားကိလက္ညိဳးထုိးသျဖင့္ ျဖဳတ္ေပးခဲ့ေသာ္လည္း အခု free app cracked မ်ားကုိပါ လက္ညိဳးထုိးေနၾကျပန္ပါတယ္။ မိုဘုိင္းယူဇာအမ်ားအျပားအသုံးျပဳေနၾကေသာ ျမန္မာ Mobile Application Store (www.myanmarmobileapp.com) ကုိဖ်က္ေပးဖို႕ေတာင္းဆုိၾကျပန္တယ္။ ဘယ္လုိလူေတြလဲ။

Myanmar Mobile Application Store


ဒါဖတ္ၿပီးမွ Designer လုပ္ပါ
ဒီဇိုင္နာတစ္ေယာက္ ျဖစ္ဖို႔ လြယ္တယ္လို႔ သင္ထင္ပါသလား။ ဒီဇိုင္းနဲ႔ ပတ္သက္တဲ့ သင္တန္းေတြ တက္မယ္၊ တစ္ခ်ဳိ႕ေတြကေတာ့ သင္တန္း မတက္ဘူး။ ကိုယ္တိုင္ ေလ့က်င့္မယ္။ အဲဒီေနာက္မွာေတာ့ ဒီဇိုင္နာ အလုပ္တစ္ခု ဝင္ေလွ်ာက္မယ္၊ အဲဒီလို မေလွ်ာက္ခ်င္ဘူး ဆိုရင္ေတာ့ Freelance Designer လုပ္မယ္ ဆိုပါေတာ့။ အမ်ားသူငါေတြက ဒီဇိုင္းေတြ အပ္ၾကမယ္။ ကိုယ္က သူတို႔လိုခ်င္တဲ့ ပံုစံေတြကို ဖန္တီးေပးမယ္၊ ပိုက္ဆံရမယ္။ ဒီလို ေတြးၾကည့္ရင္ေတာ့ ဒီဇိုင္နာ လုပ္ရတာ မခက္ပါဘူး။
Description: http://fc00.deviantart.net/fs7/i/2005/213/9/2/Home_and_the_Fairies_by_zancan.jpg
Wyeth Hansen Design
ဒါေပမယ့္ တကယ့္ကို ေတာ္တဲ့ ကၽြမ္းက်င္တဲ့ ဒီဇိုင္နာ၊ ေဒါင္ေဒါင္ျမည္ ဒီဇိုင္နာ တစ္ေယာက္ ျဖစ္ဖို႔ဆိုရင္ ေလ့က်င့္မႈေတြ အမ်ားႀကီး လုပ္ဖို႔ လိုပါတယ္။ အျပင္းအထန္ ႀကိဳးစားဖို႔ လိုပါတယ္။ ျမႈပ္ႏွံၿပီး လုပ္ဖို႔ လိုအပ္ပါတယ္။ အကယ္၍ သင့္အေနနဲ႔ ခုမွ ဒီဇိုင္နာ ျဖစ္ဖို႔ ႀကံစည္ေနတဲ့ သူတစ္ေယာက္ အေနနဲ႔ ဆိုရင္ ဒီဇိုင္နာအလုပ္ကို ေမဂ်ာေနရာမွာ ထားရမလား၊ မိုင္နာ ေနရာမွာ ထားရမလား စသည္ျဖင့္ သိခ်င္လာပါလိမ့္မယ္။ ကိုယ့္အေနနဲ႔ ဒီဇိုင္နာ တစ္ေယာက္အျဖစ္ အသက္ေမြးဝမ္းေၾကာင္း ျပဳသင့္မျပဳသင့္ စမ္းစစ္ၾကည့္ခ်င္ လာပါလိမ့္မယ္။ ဒီလို ျမွတ္ႏွံၿပီး လုပ္ရမယ့္ ေနရာေတြမွာ အခ်ိန္ေပးၿပီး လုပ္ရမယ့္ေနရာေတြမွာ ခရီးေတာ္ေတာ္ေပါက္မွ မျဖစ္ႏိုင္မွန္း သိတဲ့အခါ ေတာ္ေတာ္ စိတ္ပ်က္ဖို႔ေကာင္းပါတယ္။ ဒါေၾကာင့္ မစခင္ကတည္းက ျဖစ္ႏိုင္ မျဖစ္ႏိုင္ ႀကိဳတင္ စမ္းစစ္တာ အေကာင္းဆံုးပါပဲ။ ကဲ ကၽြန္ေတာ္တို႔ ကိုယ္ကိုယ္ကို ဒီဇိုင္နာ မျဖစ္သင့္တဲ့ အခ်က္ေတြ စမ္းစစ္ၾကည့္ရေအာင္
၁။ သင့္မွာ အႏုပညာ ဓာတ္ခံမရွိရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔
ဒီလိုေျပာလိုက္ရင္ နည္းနည္းေတာ့ ေခါင္းေျခာက္ သြားပါလိမ့္မယ္။ တစ္ခ်ဳိ႕ေတြက ဒီဇိုင္နာနဲ႔ အႏုပညာဓာတ္ခံကို ခြဲျခားၿပီး ေတြးတတ္လို႔ပါ။ လံုးဝမဆိုင္တဲ့ သီးျခား အုပ္စုေတြလို႔ ျမင္တတ္ၾကပါတယ္။ တစ္ခ်ဳိ႕ေတြကေတာ့ အနည္းငယ္ ဆက္စပ္မႈ ရွိတယ္လို႔ လက္ခံၾကပါတယ္။
Scrarch Guitar Singer
တကယ့္ သေဘာမွာေတာ့ အဲဒီလို အမ်ဳိး မတူဘူးလို႔ ေတြးတာ အႏုပညာ ဓာတ္ခံမရွိပဲ ဒီဇိုင္နာ ျဖစ္ႏိုင္တယ္ ဆိုတဲ့အေတြးဟာ မွားတယ္လို႔ ဆိုႏိုင္ပါတယ္။ ဒီဇိုင္နာဆိုတာ အနုပညာသမားပါပဲ။ အႏုပညာ ဓာတ္ခံရွိတဲ့သူေတြ ျဖစ္ပါတယ္။ အဲဒီလို ဘာေၾကာင့္ ဆိုႏိုင္သလဲဆိုရင္ ခုေခတ္မွာ တကယ့္ေအာင္ျမင္တဲ့ ဒီဇိုင္းေတြ၊ ဖန္တီးခ်က္ေတြ အားလံုးဟာ အႏုပညာ ပစၥည္းေတြ ျဖစ္လို႔ပါပဲ။
အေကာင္းဆံုးဆိုတဲ့ ဒီဇိုင္းလိုဂိုေတြ၊ Website ဒီဇိုင္းေတြ အမ်ားစုဟာ စာရြက္ေပၚမွာ ေရးျခစ္ပံုေဖာ္ၿပီး ဒီဇိုင္းအဆင့္ကို စခဲ့ၾကတာပဲ ျဖစ္ပါတယ္။ ဒါက Website ေတြမို႔ ထားပါဦး။ ကြန္ပ်ဴတာေပၚမွာ ဒီဇိုင္းေတြ ဆြဲႏိုင္ဖို႔ အေထာက္အပံ့ ေပးေနတဲ့ Photoshop လို Illustrator လို Software ေတြမွာလည္း အႏုပညာေျမာက္ ပစၥည္းေတြ အျပင္မွာလို ဖန္တီးႏိုင္ေအာင္ စီစဥ္ေပးထားတာ ေတြ႔ရမွာ ျဖစ္ပါတယ္။ ဒါေၾကာင့္ အႏုပညာ ဓာတ္ခံ မရွိရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔။
၂။ ဒီဇိုင္းေတြကို မခ်စ္တတ္ရင္ ဖန္တီးဖို႔ အရူးအအမူးမျဖစ္ရင္ ဒီဇိုင္နာမလုပ္ပါနဲ႔
တကယ့္ကို ေဒါင္ေဒါင္ျမည္ ဒီဇိုင္နာေတြဆိုတာ ဒီဇိုင္းေတြကုိ ခ်စ္တတ္ၾကသလို ဖန္တီးဖို႔လည္း အရူးအမူး စိတ္အား ထက္သန္ၾကပါတယ္။ ဒီဇိုင္းဖန္တီးေနတဲ့ အခ်ိန္မွာ ထမင္းေမ့ဟင္းေမ့ လုပ္တတ္ၾကပါတယ္။ ရူးသြပ္တယ္ ဆိုတာ ႀကိဳက္တယ္၊ ႏွစ္သက္တယ္ ဆိုတာထက္ အမ်ားႀကီး ပိုပါတယ္။ အဲဒီေနရာမွာ ရူးသြပ္မႈ အဆင့္ကို ဘယ္လို တိုင္းတာမလဲ။ အဓိကက ဒီဇိုင္းသမားဟာ ဒီဇိုင္းဆြဲဖို႔သာ အာရံုက်ေနဖို႔ပါ။ ဒီ ဒီဇိုင္းက ပိုက္ဆံ ဘယ္ေလာက္ ရမွာလဲ၊ ဘယ္ေလာက္ အထိလုပ္ရမွာလဲ၊ စသည္ျဖင့္ ေတြးမေနတတ္ပဲ ဒီဇိုင္းက ဒီဇိုင္းအတြက္၊ Art for Art Sake ဆိုသလို ေတြးေတာ ဖန္တီးေနတာမ်ဳိးပါ။ အဲဒီလို အရူးအမူး ျဖစ္ေနမွသာ အသစ္ေတြကို ဖန္တီးႏုိင္သလို အသစ္ေတြကို ဆာေလာင္တတ္လာမွာ ျဖစ္ပါတယ္။
Art for art sake
အဲဒီအျပင္ ကိုယ့္အေနနဲ႔ ဒီဇိုင္နာ တစ္ေယာက္ အရူးအမူးကို ျဖစ္ခ်င္ေနဖို႔ လိုပါတယ္။ မဟုတ္ရင္ေတာ့ ဒီဇိုင္နာေကာင္း တစ္ေယာက္ ျဖစ္လာမွာ မဟုတ္ပါဘူး။
လက္ကုန္သြားတယ္ဆိုတဲ့ ျပႆနာဟာ ဒီဇိုင္နာေတြအတြက္ အဓိက အတားအဆီး ျဖစ္ပါတယ္။ အဲဒီလို လက္ကုန္သြားတဲ့ အခ်ိန္မွာ စာေရးတာပဲ ျဖစ္ျဖစ္ ဒီဇုိင္းဆြဲတာပဲ ျဖစ္ျဖစ္ ဘာမွ ေရွ႕ဆက္လို႔ မရ ျဖစ္သြားတတ္ပါတယ္။ အဲဒီလို လက္ကုန္သြားတဲ့ အခ်ိန္မွာ လက္ျပန္တက္လာဖို႔ အသစ္ေတြကို ဆက္လက္ဖန္တီးဖို႔ ေစာင့္ရတဲ့အခ်ိန္ကို အတိအက် ေျပာလို႔ မရေတာ့ပါဘူး။ အဲဒီလိုေစာင့္ရင္း ေစာင့္ရင္း ပံုစံတူ ပေရာဂ်က္ တစ္ခုမ်ား ေရာက္လာမလားလို႔ ေတြးရင္ အခ်ိန္ေတြ ကုန္သြားတဲ့သူေတြ မနည္းပါဘူး။ အဲဒီလို လက္ကုန္ရျခင္း အေၾကာင္းအရင္းေတြကို ျပန္ၾကည့္မယ္ဆိုရင္ အေၾကာင္းအရင္းေတြက အမ်ားႀကီး ျဖစ္လာပါလိမ့္မယ္။ အႏုပညာ လြပ္လပ္ခြင့္မရတာ၊ ေၾကးစားဒီဇိုင္နာ ဆန္လာတာ၊ အသစ္ေတြကို ေတြးေတာဖို႔ အခ်ိန္မရတာ၊ ဥာဏ္မကြန္႔ျမဴးႏုိင္တာ၊ က်င္လည္ႏိုင္တဲ့ နယ္ပယ္ ကုန္သြားတာ စသည္ျဖင့္ အမ်ားႀကီး ရွိႏုိင္ပါတယ္။ အဲဒီလုိ ျဖစ္လာၿပီဆိုရင္ ကိုယ့္ကို ျပန္လည္ လက္တက္ႏိုင္ဖို႔ အသစ္တစ္ဖန္ ျပန္လည္ ေမြးဖြားေပးႏိုင္ဖိို႔ တစ္ခုတည္းေသာ နည္းကေတာ့ ရူးသြပ္မႈ ပါပဲ။ အဲဒီအခ်ိန္မွာ ရူးသြပ္တဲ့စိတ္ ကို ျပန္လည္ေမြးျမဴဖို႔ လိုပါတယ္။ အဲဒီလို ေမြးလိုက္မွ ေဘးကေန သက္ေရာက္ေနတဲ့ အတားအဆီးေတြကို ဖယ္ရွား ႏုိင္မွာ ျဖစ္ပါတယ္။ ဒီေတာ့ ဒီဇိုင္းေတြကုိ မခ်စ္ရင္ ဒီဇိုင္းေတြကို ဖန္တီးဖို႔ မရူးသြပ္ရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔။
၃။ လြယ္လြယ္နဲ႔ အရံႈးေပးတတ္သူ၊ အာရံုမစိုက္ႏိုင္တဲ့သူ၊ အခ်ိန္မေပးႏိုင္တဲ့သူဆိုရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔
Give up
ကိုယ့္အေနနဲ႔ ေၾကာ္ျငာလုပ္ငန္းအတြက္ ဒီဇိုင္နာလုပ္မယ္လို႔ စိတ္ကူးထားသလား။ ဒါဆိုရင္ေတာ့ အေရာင္ေတြခ်ိန္းတာ၊ စြန္းထင္းေနတာေတြ ဖယ္ရွားတာ၊ တကယ့္ အစစ္အမွန္အတုိင္း ျဖစ္ေအာင္ ဖန္တီးတာ၊ ေဖာင့္ေတြမ်ဳိးစံုသံုးတာ အေရာင္းေတြ ကစားတာ စသည္ျဖင့္ ပ်င္းေလာက္ေအာင္ ထိုင္ၿပီး လုပ္ရပါေတာ့မယ္။ တစ္ခါတစ္ေလ ဒီဇိုင္းတစ္ခုကို တစ္ပတ္နဲ႔ေတာင္ မအပ္ႏိုင္တာမ်ဳိးေတြ ရွိလာေတာ့မွာ ျဖစ္ပါတယ္။ ဒါေပမယ့္ တကယ့္ အလုပ္မွာေတာ့ အခ်ိန္ကန္႔သတ္ခ်က္ေတြ ရွိလာမွာ ျဖစ္ပါတယ္။ အဲဒီလို က်ဥ္းထဲက်ပ္ထဲ ေရာက္တဲ့အခါ လြယ္လြယ္နဲ႔ အရံႈးေပးတတ္တဲ့သူ၊ အာရံုမစိုက္ႏိုင္တဲ့သူ၊ အခ်ိန္မေပးႏိုင္တဲ့သူ ဒီဇိုင္းနာလုပ္ဖို႔ မျဖစ္ႏိုင္ေတာ့ပါဘူး။
၄။ ေပါင္းသင္းဆက္ဆံေရး မေကာင္းရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔
ဒါကေတာ့ ကိုယ့္အဖြဲ႕ကလူေတြနဲ႔ အဆင္ေျပရဲ႕လား ဆိုတဲ့အေပၚ မူတည္ပါတယ္။ အဖြဲ႔လိုက္ လုပ္ကိုင္ေဆာက္ရြက္ တတ္ရဲ႕လား။ ဒီေမးခြန္း ကေတာ့ လူတိုင္း ရင္းႏွီးၿပီးသား ျဖစ္မွာပါ။ အလုပ္လုပ္ဖူးတယ္ ဆိုရင္ေပါ့။ အဲဒီလိုပါပဲ ဒီဇိုင္နာ အလုပ္ေတြမွာလည္း လူအမ်ားနဲ႔ ပူးေပါင္း ေဆာင္ရြက္ ႏုိင္ဖို႔ လိုပါတယ္။ ဒါကေတာ့ ဒီဇိုင္နာ ေတာ္ေတာ္မ်ားမ်ား ဘဝင္မက်ႏုိင္တဲ့ ကိစၥျဖစ္ပါတယ္။ ဒီဇိုင္းဆြဲမယ္ဆိုရင္ တစ္ေယာက္တည္း ထိုင္ၿပီးဆြဲခ်င္ ၾကပါတယ္။ ဒါေပမယ့္ တကယ့္ အလုပ္ေလာကမွာ အဲဒီလို လုပ္လို႔ မရပါဘူး။ အပိုင္းလိုက္ အကန္႔လိုက္ တာဝန္ယူၾကရပါတယ္။ သူက Heading Design ကိုယ္က Body Design စသည္ျဖင့္ တာဝန္ယူ ေရးဆြဲၾကရပါတယ္။ အဲဒီအခါမွာ ပူးေပါင္းေဆာင္ရြက္မႈ မရွိရင္ တကယ္တန္း Product အျဖစ္ ျပန္ေပါင္းတဲ့အခါ ဘယ္လိုမွေပါင္းလို႔ ကိုက္မွာ မဟုတ္ေတာ့ပါဘူး။ သူက Color Scheme တစ္မ်ဳိး၊ ကိုယ္က Color Scheme တစ္မ်ဳိးဆိုရင္ ဘယ္လိုမွာ ေပါင္းလို႔ရမွာ မဟုတ္ပါ။
Collaboration
ဒါေပမယ့္ ဒီဇိုင္း အလုပ္ေတြမွာ တစ္ခါတစ္ေလ တစ္ဦးတည္း ႀကိတ္ရတာေတြလည္း ရွိပါတယ္။ အဲဒီလို တစ္ဦးတည္း ႀကိတ္ရတာလည္း ရွိသလို ပူးေပါင္းေဆာင္ရြက္ ရတာလည္း ရွိပါတယ္။ အဲဒီအတြက္ ေပါင္းသင္းဆက္ဆံေရး ေကာင္းဖို႔ ပူးေပါင္းေဆာင္ရြက္ တတ္ဖို႔ လိုလာတာ ျဖစ္ပါတယ္။
ေပါင္းသင္းဆက္ဆံေရး ေကာင္းဖို႔ ဆိုတဲ့ေနရာမွာ ကိုယ့္ကို အလုပ္အပ္တဲ့သူေတြနဲ႔ အဆင္ေျပတာ၊ ကိုယ့္ လုပ္ေဖာ္ကိုင္ဖက္ေတြနဲ႔ အဆင္ေျပတာ စတဲ့အခ်က္ေတြတင္ ေျပာတာ မဟုတ္ပါဘူး။ တကယ္ေတာ့ ဒီဇိုင္းဆိုတာကလည္း အခ်င္းခ်င္း အျပန္အလွန္ ဆက္သြယ္တဲ့ ၾကားခံ ဖန္တီးမႈ တစ္ခုျဖစ္ပါတယ္။ ဒါေၾကာင့္ ေပါင္းသင္းဆက္ဆံေရး ပစၥည္းတစ္ခုပဲလို႔ ဆိုရင္ မွားမယ္ မထင္ပါဘူး။ ဒါေၾကာင့္ ေပါင္းသင္းဆက္ဆံေရး ေကာင္းရင္ ေပါင္းသင္းဆက္ဆံေရး သေဘာတရားေတြကို နားလည္ရင္ ဒီဇိုင္းေကာင္းေကာင္း ဖန္တီးႏိုင္မယ္လို႔ ဆိုပါတယ္။ ဒါေၾကာင့္ ေပါင္းသင္းဆက္ဆံေရး မေကာင္းရင္ ဒီဇိုင္နာ မလုပ္ပါနဲ႔။
Reff: အေနနဲ႕ .. မူရင္းကေတာ့ lannthit.com ျဖစ္ၿပီး.. MISTAKE 51 မွေန ေဖာ္အဲဗား မိတ္ေဆြမ်ားထံ ျပန္လည္ မွ်ေ၀ေပးပါသည္။

////////////////////////////////////////////////////////////////////////////////

2ကၽြန္ေတာ္သိေသာ Android အေၾကာင္း (၁)

What is Android?( Android ဆိုုတာ ဘာလဲ)
Android လိုု ့ေျပာလိုက္တာနဲ ့က်ေနာ္တို႔တေတြ မ်က္လုုံးထဲမွာ အစိမ္းေရာင္ စက္ရုပ္ကေလးကတာ့ ျမင္ေယာင္ ေနမယ္ထင္တယ္။ ျမန္မာ mobile ဖုန္းအသံုးျပဳသူအမ်ားစုကေတာ့ Android ဆိုတဲ့နာမည္ကို တီးျမည့္ေခါက္မည့္ရွိျပီးသားျဖစ္မွာပါ။ အခုုမွ ဘာလိုု ့ ထေရးရလည္းဆိုုေတာ့ မသိေသးတဲ့သူေတြလဲ သိရေအာင္ က်ေနာ္သိထားတဲ့ Android အေၾကာင္းေလး အနည္းငယ္ကိုု ေ၀မ်ွတဲ့သေဘာေလာက္ပါပဲ။
Description: http://www.little-players.com/blog/wp-content/uploads/2011/09/android-banner.jpg
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 စတဲ့ ကုုမၺဏီၾကီးေတြပါ၀င္ပါတယ္။

Description: http://hi-android.info/wp-content/uploads/2010/07/img_104141_android_13.jpg
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) ရွိလ်ွင္ကိုုျဖစ္ေနပါျပီ။ ဒီေတာ့ကိုု ေ၇းသားမယ့္စက္ေပၚမွာတင္စမ္းသက္နုုိင္တာေပါ့ဗ်ာ။ 

Ye` Paing Phyo ေရးသားထားတဲ့.. MISTAKE 51 က Android အေၾကာင္းပဲ ျဖစ္ပါတယ္။
အပိုင္း (၅) ပိုင္းခြဲ ၿပီး တင္ျပေပးသြားမွာ ျဖစ္ပါတယ္။
မူရင္းလင့္အေနနဲ႕ MISTAKE 51 ပါ။ Networking နဲ႕ အျခား နည္းပညာမ်ားကို မွ်ေ၀ေပးေနေသာ ကိုတင္ထြန္းလြင္ မွ တည္ေထာင္ထားေသာ ဆိုက္တစ္ခု ျဖစ္ပါသည္။

http://www.m51a.com/index.php?page=YXJ0aWNsZXM=

ဆုိလည္းရပါသည္။

Description: http://api.ning.com:80/files/GTRwmJ2XK4gpRF3qWSaLaltjt3BBn4*RcGb3WS05t5HeIzaKSilLDsdieT6F5NNRwP*6dwqiS*Rw-I*RAf1d8b5jVsKpdPGQ/542773236.jpeg?xgip=148%3A0%3A764%3A764%3B%3B&width=64&height=64&crop=1%3A1
ကၽြန္ေတာ္သိေသာ 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) ပါပဲ။
Description: http://upload.wikimedia.org/wikipedia/commons/6/63/System-architecture.jpg
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 နဲ ့ အနည္းငယ္ ႏႈိင္းယွဥ္တင္ျပလိုတာေၾကာင့္ ေနာက္တစ္ပိုင္းမွ ေရးသားပါေတာ့မယ္။
Ye` Paing Phyo ေရးသားထားတဲ့.. MISTAKE 51 က Android အေၾကာင္းပဲ ျဖစ္ပါတယ္။
အပိုင္း (၅) ပိုင္းခြဲ ၿပီး တင္ျပေပးသြားမွာ ျဖစ္ပါတယ္။
မူရင္းလင့္အေနနဲ႕ MISTAKE 51 ပါ။ Networking နဲ႕ အျခား နည္းပညာမ်ားကို မွ်ေ၀ေပးေနေသာ ကိုတင္ထြန္းလြင္ မွ တည္ေထာင္ထားေသာ ဆိုက္တစ္ခု ျဖစ္ပါသည္။


ဆုိလည္းရပါသည္။

ကၽြန္ေတာ္သိေသာ 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 ကိုု ဦးစြာ ရွင္းလင္းတင္ျပပါရေစ။
ေအာက္က ပုုံကိုု တခ်က္ၾကည့္ေပးပါ။

Description: http://yepaingphyo.files.wordpress.com/2012/02/jvm.jpg?w=600
သင္ၾကိဳက္နွစ္သက္ရာ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 ေပၚတြင္ အလုုပ္လုုပ္ေစျခင္းမ်ဳိးျဖစ္ပါတယ္။

Description: http://yepaingphyo.files.wordpress.com/2012/02/jvm-delvik.jpg?w=722&h=746
က်ေနာ္ တိုု ့ဒီေန ရာမွာ သတိထားရမွာက 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 မ်ား ႏွင့္ပတ္သက္ျပီး ဆက္လက္တင္ျပေပးပါမည္။
Ye` Paing Phyo ေရးသားထားတဲ့.. MISTAKE 51 က Android အေၾကာင္းပဲ ျဖစ္ပါတယ္။
အပိုင္း (၅) ပိုင္းခြဲ ၿပီး တင္ျပေပးသြားမွာ ျဖစ္ပါတယ္။
မူရင္းလင့္အေနနဲ႕ MISTAKE 51 ပါ။ Networking နဲ႕ အျခား နည္းပညာမ်ားကို မွ်ေ၀ေပးေနေသာ ကိုတင္ထြန္းလြင္ မွ တည္ေထာင္ထားေသာ ဆိုက္တစ္ခု ျဖစ္ပါသည္။

http://www.m51a.com/index.php?page=YXJ0aWNsZXM=

ဆုိလည္းရပါသည္။
Views: 136

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

ပထမေတာ့ က်ေနာ္ Android SDK & Java SDK installation လုုပ္ပုုံ နဲ ့Hello World Program တခုုေရးျပီး မိတ္ဆက္ မလိုု ့ပါပဲ။ ဒါေပမယ့္ Android အေၾကာင္းကိုု ပိုုျပီးနက္နက္နဲနဲသိေစခ်င္တာနဲ ့ဒါေလးေရးျဖစ္သြားတာပါ။
ယခုုအပိုုင္းမွာ Activities ေတြအေၾကာင္းကိုု ေျပာခ်င္ပါတယ္။ ၄င္းဟာ ဘယ္ေလာက္အေရးၾကီးေၾကာင္း မေျပာလိုုေပမယ့္ ေလ့လာဖတ္ရႈ႔ရင္းနဲ ့Mobile device ေတြအတြက္ အသက္တခုုပဲဆိုုတာ သေဘာေပါက္လာမယ္ထင္ပါတယ္။
Description: http://www.skill-guru.com/blog/wp-content/uploads/2011/01/Android_Logcat-Activity-Starts.jpg
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 မ်ားအေၾကာင္းကိုု ေ၀မ်ွေရးသားလိုုပါတယ္။
Ye` Paing Phyo ေရးသားထားတဲ့.. MISTAKE 51 က Android အေၾကာင္းပဲ ျဖစ္ပါတယ္။
မူရင္းလင့္အေနနဲ႕ MISTAKE 51 ပါ။ Networking နဲ႕ အျခား နည္းပညာမ်ားကို မွ်ေ၀ေပးေနေသာ ကိုတင္ထြန္းလြင္ မွ တည္ေထာင္ထားေသာ ဆိုက္တစ္ခု ျဖစ္ပါသည္။

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

How to Create a Button on Android
ဒီတပတ္ေတာ့ Android ေပၚမွာ Button ေတြဘယ္လိုု တည္ေဆာက္တယ္ဆိုုတာေလ ကိုု tutorial ေလးတခုုျပခ်င္ပါတယ္။ ျပီးေတာ့ Android App တခုုမွာပါ၀င္တဲ့ ဖုုိင္ေတြအေၾကာင္းလဲ အနည္းငယ္တင္ျပေဆြးေႏြးလိုုပါတယ္။
ပထမကေတာ့ Android installation လုုပ္ပုုံကိုု ေရးသားမလိုု ့ပါဘဲ။ ဒါေပမယ့္အရမ္းလဲမခက္ခဲတဲ့ အတြက္ မေရးသားျဖစ္ေတာ့တာပါ။ သင့္အေနနဲ ့Android SDK မသြင္းထားရေသးဘူးဆိုုရင္ေတာ့ http://developer.android.com/ သြားေရာက္ကာ မိမိအသုုံးျပဳေနတဲ့ OS အလိုုက္ SDK ကိုု download ျပဳလုုပ္ကာ သြင္းပါ။ SDK မသြင္းခင္ JDK ကိုု အရင္သြင္းပါ။ ဒီအဆင့္ေတြက one click install ေတြမိုု ့အဆင္ေျပမွာပါ။ က်ေနာ္တိုု ့အတြက္ ျပႆနာက အရမ္းေနွးတဲ့ ကြန္နက္ရွင္မွာ platform tools ေတြေဒါင္းရမယ့္ျပႆနာျဖစ္ေကာင္းျဖစ္နုုိင္ပါတယ္။

Android မွာ Button တခုုေရးဖိုု ့ဘာမွမခက္လွပါဘူး android.widget.Button ဆိုုတဲ့ class ေလးကိုု သုုံးျပီး သာမန္ button တခုုကိုု ေရးသားလိုုက္တာပါပဲ။ ခုုေရးသားမယ့္ post ေလးမွာေတာ့ button ေလးကိုု နွိပ္ရင္ web page တခုုသြားမယ္ ျပီးရင္ Android ရဲ ့browser ေပၚမွာ website ေလးျပသမယ္ေပါ့။
ပထမဦးဆုုံးအေနနဲ ့ Eclipse တြင္ File > New > Other > Android Project ကိုုေရြးပါ။ Eclipse ကိုုပထမဆုုံး run ခ်ိန္မွာသာ Android Project ကိုု ယခုနည္းနဲ ့ေခၚယူရေသာ္လည္း ေနာက္အေခါက္မ်ားမွာေတာ့ File > New > Android Project အျဖစ္ တိုုက္ရိုုက္ ေခၚယူနုုိင္ပါတယ္။
(၁) New Project Prompt box (Dialog windows) တြင္ ျဖည့္စြက္ရမွာေတြက အနည္းငယ္ ရွင္းျပလိုုပါတယ္။ ပထမဆုုံး အေနနွင့္ က်ေနာ္တိုု ့ Project Name ကိုုျဖည့္စြက္ရမွာျဖစ္ပါတယ္။ ဒီလိုု ပေရာဂ်က္ နာမည္ကိုု သတ္မွတ္ရာမွာ ကြက္လပ္မျခားဘဲ (space မပါ၀င္ပဲ) စကားလုုံး တစ္လုုံးတည္းျဖစ္ေအာင္ ေပးရပါမယ္။ အေကာင္းဆုုံးကေတာ့ CamelCase Naming system ပဲျဖစ္ပါတယ္။ (CamelCase ဆိုုတာကေတာ့ iPad iPhone MacDonald တိုု ့လိုု ့တစ္လုုံးနွင့္ တလုုံးၾကား space ကြက္လပ္မ်ား ပါ၀င္ျခင္းမရွိပဲ စကာလုုံး တစ္လုုံးတည္းအျဖင့္ ေရးသားတဲ့ပုုံစံကိုု ဆိုုလိုုျခင္းျဖစ္ပါတယ္) ဒီလိုု ေရးသား နာမည္ေပးရာတြင္ သက္ဆုုိင္၇ာ ပေရာဂ်က္နွင့္လိုုက္ဖတ္ဖိုု ့ေတာ့လိုုပါသည္။ ယခုု က်ေနာ္တိုု ့ပေရာဂ်က္သည္ button တခုုစမ္းသပ္တဲ့ ပေရာဂ်က္ျဖစ္တဲ့အတြက္ ButtonTutorial ဆိုုျပီ meaningful ျဖစ္ေသာ နာမည္မ်ဳိးေပးသင့္ပါတယ္။ Project Name သည္ Eclipse ၏ တည္ေဆာက္မွဳ Eclipse construct ျဖစ္သည္။ Eclipse သည္ အရာအားလုုံးကိုု project မ်ားအျဖစ္ သီးျခားစီခြဲထုုတ္ စုုစည္းထားသည္။
Description: http://yepaingphyo.files.wordpress.com/2012/05/project-name.jpg?w=365&h=566
(၂) ဒီအဆင့္ျပီးတဲ့အခ်ိန္မွာ Build Target ကိုု ေရြးရတဲ့အဆင့္ပဲျဖစ္ပါတယ္။ build target ေရြးရတာကေတာ့ က်ေနာ္တိုု ့ေရးသားတ့ဲ ပေရာဂ်က္က မည္သည့္ version အတြက္ ေရးသားမွာလဲဆိုုတာကိုု ေျပာၾကားမွာျဖစ္ပါတယ္။ ဥပမာ သင့္အေနနဲ ့Android version 4.0.3 အတြက္ေရးသားမည္ app စသည္ျဖင့္ သတ္မွတ္နုုိင္ပါသည္။ Build Target (panel) ထဲတြင္ က်ေနာ္တိုု ့ေနာက္ထပ္ ထပ္သြင္းထားသည့္ platform မ်ားနွင့္ add-on မ်ားကိုု list ျဖင့္ျပသမည္ျဖစ္သည္။ က်ေနာ္ကေတာ့ ေနာက္ဆုုံးဗားရွင္း အသစ္ကိုုသာေရြးလိုုက္ပါမယ္။ သင့္အေနနဲ ့မိမိစိတ္ၾကိဳက္ SDK version ကိုုေရြးနုုိင္ပါတယ္။ Google APIs အမည္ နဲ ့ target မ်ားကိုု မေရြး ဖိုု ့အၾကံျပဳပါရေစ။ ၄င္းတိုု ့သည္ Android Platform အတြက္ Google ၏ မူပိုုင္ မ်ားျဖစ္သည္။ Android ရဲ ့Open Source version မ်ားကိုုသာ အသုုံးျပဳျခင္းက ေနာက္ေၾကာင္း ပိုုရွင္းပါတယ္။ က်ေနာ္တိုု ့အေနနဲ ့copyrigh မူပိုုင္ခြင့္ကိစၥကိုု ေပါ့ေသးေသးမထားသင့္ေတာ့ေပ အားလုုံးစဥ္းစားထားဖိုု ့လိုုအပ္လာျပီျဖစ္ပါတယ္။)
Description: http://yepaingphyo.files.wordpress.com/2012/05/target.jpg?w=408&h=428
(၃) Project ရဲ ့ properties မ်ားကိုု ျဖည့္စြက္ရတဲ့အခါ application name ဟာ system နဲ ့မသက္ဆုုိင္တဲ့အတြက္ ကိုုယ္ေပးခ်င္တဲ့ application name ကိုုၾကိဳက္နွစ္သက္သလိုု စာလုုံးအထားအသိုုပဲျဖင့္ျဖင့္ (space)ပါျပီးေတာ့ပဲျဖင့္ျဖင့္ ေပးနုုိင္ပါတယ္။ အေပၚမွာေျပာခဲ့သလိုု Meaningful ျဖစ္ဖိုု ့ေတာ့လိုုတာေပါ့ေနာ္။
(၄) Package Name ဟာ Java ရဲ ့အေရးပါတဲ့တည္ေဆာက္မွုု (Java Contract) တခုုျဖစ္ပါတယ္။ နားလည္ေအာင္ေျပာရရင္ ေတာ့ Folder တခုုနဲ ့ဆင္တူပါတယ္။ က်ေနာ္တိုု ့က သက္ဆုုိင္ရာ Folder ေတြထဲမွာ သက္ဆိုုင္ရာ files ေတြကိုု စုုစည္းသိမ္းဆည္းပါတယ္။ flies ေတြကိုု Java ရဲ ့ classes မ်ားအျဖင့္ ျမင္နုုိင္ပါတယ္။ ဒီေတာ့ က်ေနာ္တိုု ့က folder ကိုု လုုပ္ပိုုင္ခြင့္ (permission) ကန္ ့သတ္တာပဲျဖင့္ျဖင့္ ဘာပဲ လုုပ္လုုပ္ အထဲက ဖိုုင္ေတြကိုုပါ သက္ေရာက္ပါတယ္။ အထဲက fliel လိုုခ်င္ရင္ folder ကိုု အရင္ဖြင့္ ေခၚသုုံးရသလိုုေပါ့။Java programming မွာ source code ေတြကိုု package မ်ားအျဖစ္ သီးျခားစြာခြဲထုုတ္ စုုစည္းပါတယ္။ ဒါေၾကာင့္ Package ေတြဟာ အလြန္ကိုု အေ၇းပါ ပါတယ္။ဘာေၾကာင့္လဲဆိုုေတာ့ ကိုုယ့္ပေရာဂ်က္ ထဲမွာရွိတဲ့ Java class မ်ဳိးစုုံၾကားထဲမွာ Object မ်ားကိုု class အခ်င္းခ်င္း ေတြ ့ေစသတ္မွတ္ထားတာေၾကာင့္ျဖစ္ပါတယ္။ Android မွာလဲ package မ်ားဟာ apps ေတြကိုု sign လုုပ္ရာတြင္အေရးပါပါတယ္။ Android developer အမ်ားစုုကေတာ့ package name ေတြကိုု သူတိုု ့website domain name ေတြရဲ ့ေျပာင္ျပန္ပုုံစံနဲ ့ေပးေလ့ရွိပါတယ္။ ဥပမာ m51a.com ဆိုုပါေတာ့ သူတိုု ့ေရးသားမယ္ apps ကိုု com.m51a.ButtonTutorial အစရွိသျဖင့္ ေပးၾကပါတယ္။ com.example.yourappName ေပါ့။
Description: http://yepaingphyo.files.wordpress.com/2012/05/packagename.jpg?w=351&h=623
(၅) Min SDK Version ဆိုုတာက အနွိပ္ဆုုံး minimum Android version ကိုု API level ျဖင့္ ေဖာ္ျပေလ့ရွိတာကိုုေျပာတာပါ။ ကိုုယ့္ app ကိုု run မည့္ device ၇ဲ ့ လိုုအပ္ခ်က္ (spec) ျဖစ္ပါတယ္။ API နွိပ္နုုိင္သမ်ွ နိပ္ေလ ကိုုယ့္ app ကိုု version အေတာ္မ်ားမ်ားမွာသုုံးနုုိင္ေလျဖစ္မွာပါ။
ကဲ ဒါဆိုု အေပၚမွာေျပာခဲ့တဲ့အတုုိင္း ပထမဦးဆုုံး File > New > Other > Android Project ကိုုေရြးပါ ျပီးရင္ေတာ့ Project Name မွာ ButtonTutorial လိုု ့ေပးလိုုက္ပါ။ ျပီးရင္ ကိုုယ္ app ဘယ္ version မွာ run မယ္ဆိုုတာ Target ေရြးပါ။ ျပီးရင္ေတာ့ Application Name ကိုု အေပၚမွာေျပာခဲ့သလိုု မိမိစိတ္ၾကိဳက္ေပးလိုု ့ရပါတယ္။ Project name သာ space ပါ၀င္လိုု ့မရတာပါ။ Default အေနနဲ ့ေတာ့ project name လာေပၚေနပါလိမ့္မယ္။ ခုုက tutorial မိုု ့ ျပင္ခ်င္လဲ ျပင္ မျပင္ခ်င္လဲဒီတုုိင္းထားခဲ့လိုုက္လိုု ့ရပါတယ္။ Package name ကိုုေတာ့ က်ေနာ္ကေတာ့ com.m51a.ButtonTutorial လိုု ့ေပးထားလိုုက္ပါတယ္။ min SDK version ကိုုလဲ မိမိ နွစ္သက္ သလိုုသာေရြးခ်ယ္ပါ။ ဘယ္လိုုဘာေၾကာင့္ေရြးရသလဲဆိုုတာ အေပၚမွာရွင္းျပထားျပီးျဖစ္ပါတယ္။
အဆင့္ (၁) အေနနဲ ့ Button ကိုု ေပၚေအာင္ XML file မွာ ေရးသားဖိုု ့လိုုပါတယ္။ ပထမဆုုံး res/layout/main.xml ကိုုဖြင့္ျပီး ေရးသားပါမယ္။

<?xml version=”1.0 encoding=”utf-8?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<Button
android:id=”@+id/button1

android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Button – Go to M51a.com” />
</LinearLayout>

ယခုုအတုုိင္းျပင္ဆင္ ေရးသားလိုုက္ပါတယ္။

Description: http://yepaingphyo.files.wordpress.com/2012/05/structure.jpg?w=156
Layout file သည္ screen ေပၚတြင္ ေပၚေန သည္ button ေတြ ပုုံေတြ စာသားေတြ စတာေတြပုုံ ပုုံစံခ် အခင္းအက်င္းကိုုသတ္မွတ္သည့္ ဖုုိင္ျဖင့္သည္။ အရိုုးရွင္းဆုုံးေျပာရလ်ွင္ေတာ့ ဒီဇုုိင္ အခင္းအက်င္း သတ္မွတ္တဲ့ဖိုုင္ျဖစ္ပါတယ္။ mobile device ေတြမွာ သုုံးစရာ ျပသစရာ screen ေတြကလဲ ဒီတခုုတည္းရွိေတာ့ Desktop apps ေတြမွာလိုု form အမ်ဳိးမ်ဳိးကိုု ျပသနုုိင္ျခင္းမ်ဳိးမရွိပါဘူး။ ဒီလိုု ဒီဇုုိင္းခ်ထားတဲ့ object ေတြကိုု ေနာက္ကြယ္က Java file က ေမာင္းနွင္ေနတာပဲျဖစ္ပါတယ္။ ခုု က်ေနာ္တိုု ့screen ေပၚမွာ ေပၚဖိုု ့ရာအတြက္ အေပၚက code မ်ားေၾကာင့္ျဖစ္ေပၚလာရတာပါ။ Button တခုုကိုု ေရးသားထားျပီး id တခုုေပးထားပါတယ္။ ျပီးေတာ့ width နွင့္ height ကိုုသတ္မွတ္ထားျပီး Button ေပၚမွာ Go to M51a.com လိုု ့ေရးသားထားပါတယ္။
ေနာက္တဆင့္အေနျဖင့္ src ထဲက com.m51a.ButtonTutorial Package ထဲမွ ButtonTutorialActivity.java ဖိုုင္ကိုု ေအာက္ပါအတုုိင္းျပင္ဆင္ေရးသားပါမယ္။
package com.m51a.ButtonTutorial;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
public class ButtonTutorialActivity extends Activity {
/** Called when the activity is first created. */
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addListenerOnButton();
}
public void addListenerOnButton(){
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
Intent browserIntent =
new Intent(Intent.ACTION_VIEW, Uri.parse(“http://www.m51a.com”));
startActivity(browserIntent);
}
});
}
}
save လုုပ္က Run ၾကည္ပါ။ Java Source code file Andorid app အတြက္အရာရာကိုု ကိုု ေမာင္းနွင္ေသာ ဖိုုင္လိုု ့ေျပာလိုု ့ရပါတယ္။ ၄င္း file ကိုု Dalvik Executable ေျပာင္းလဲကာ app ကိုု run တာျဖစ္ပါတယ္ ယခင္ အပိုုင္းမ်ားမွာလဲ compilation မ်ားအေၾကာင္းကိုု ေျပာၾကားခဲ့ျပီးျဖစ္ပါတယ္။
mainfest file ကေတာ့ app တြင္ မည္သည့္ တိုု ့ပါ၀င္သည္ အဓိက buliding block မ်ားမွာ မည္သည္တိုု ့ျဖစ္သည္ မည္သိုု ့ေသာ သတ္မွတ္ခ်က္မ်ာလိုုအပ္သည္ စသည္တိုု ့ကိုု ရွင္းျပထားေသာ component အားလုုံးကိုု ေပါင္းစည္ခ်ိတ္ဆက္ေပးတဲ့ စာရင္းဖိုုင္ တဖိုုင္လိုု ့ေျပာလိုု ့ရပါတယ္။
ဒါကေတာ့ ခုု tutorial ရဲ ့MainFest XML ဖိုုင္ကိုု ေရးသားထားတာပဲျဖစ္ပါတယ္။

<?xml version=”1.0 encoding=”utf-8?>
<manifest xmlns:android=”http://schemas.android.com/apk/res/android
package=”com.m51a.ButtonTutorial”
android:versionCode=”1

android:versionName=”1.0
>
<uses-sdk android:minSdkVersion=”15 />
<application
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name” >
<activity
android:name=”.ButtonTutorialActivity”
android:label=”@string/app_name” >
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
</manifest>

အနည္းငယ္ဖတ္ၾကည့္ရင္ နားလည္မယ္လိုု ့ေမ်ွာ္လင့္္ပါတယ္။
Strings Files ကေတာ့ app တခုုလုုံးမွာ ပါရွိသမ်ွစာသားေတြကိုု သိမ္းဆည္းတဲ့ XML ဖိုုင္လ္ တစ္ဖိုုင္ျဖစ္ပါတယ္။ ဆိုုလိုသည္မွာ Layout XML ဖိုုင္လ္မွာ button ေတြ text area ေတြ lable စတဲ့ widget ေတြ ရဲ ့အခင္းအက်င္းမ်ား သက္သက္သာ သက္ဆုုိင္ျပီး String XML file ကေတာ့ widget ေတြမွာ ပါ၀င္တဲ့ စာသားမ်ား ၄င္းတိုု ့၏ အမည္ နာမေတြ ေတြျဖင့္တဲ့ button တိုု ့၏ နာမည္မ်ား Lable မ်ား default text မ်ား နွင့္ အလားတူ အျခားစာသားမ်ားကိုု သီးသန္ ့သိမ္းဆည္းတဲ့ ဖိုုင္ တခုုျဖစ္ပါတယ္။

<?xml version=”1.0 encoding=”utf-8?>
<resources>
<string name=”hello”>Hello World, ButtonTutorialActivity!</string>
<string name=”app_name”>ButtonTutorial</string>
</resources>

R file ကေတာ့ java srource code မ်ားနွင့္ resource ေတြကိုုၾကားမွ ေပါင္းကူးေပးတဲ့ ဖိုုင္မ်ဳိးျဖစ္ပါတယ္။ R file သည္ အလိုုအေလ်ွာက္ ဖန္တီးေသာဖိုုင္ျဖစ္ပါတယ္ ဒါေၾကာင့္ ၄င္းကိုု ျပင္ဆင္ဖိုု ့မလိုုအပ္ပါဘူး။ ဥပမာ ပုုံတပုုံထပ္တိုုးလိုုက္တာ xml ဖိုုင္လ္ တစ္ ဖိုုင္လ္ ထပ္တိုုးလိုုက္ျခင္း စတဲ့ res (folder) တြင္းေျပာင္းလဲမွုုျပဳလုုပ္တုုိင္း R file ကိုု အလိုု အေလ်ွာက္ အသစ္ ျပန္လည္ တည္ေဆာက္ပါတယ္။ တခါတေလမွာေတာ့ R file အတြင္းမွ data ကိုုယူသုုံးၾကေပမယ့္ Eclipse IDE ကသာ အလိုုအလ်ွာက္လုုပ္ေပးတာမ်ားပါတယ္။


/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.m51a.ButtonTutorial;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int button1=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}

Description: http://yepaingphyo.files.wordpress.com/2012/05/emulator1.jpg?w=300&h=278
Emulator ဆိုုတာ က်ေနာ္ ပထမ အပိုုင္းေတြမွာ ေဆြးေႏြးခဲ့သလိုု Android Developer တစ္ဦးအေနနဲ ့မိaptးသားထားတဲ့ Android Apps မ်ားကိုုစမ္းသက္ဖိုု ့Android device တလုုံးမ၀ယ္နုုိင္လဲျဖစ္ပါတယ္။ ဘာေၾကာင့္လဲဆိုုေတာ့ Emulator ေၾကာင့္ပါပဲ။ က်ေနာ္တိုု ့ရဲ ့ေရးျပီးသား Apps ပဲျဖင့္ျဖင့္ သူမ်ားရဲ ့Apps ကိုုစမ္းသပ္လိုုတာပဲျဖင့္ျဖင့္ Apps မ်ားကိုု Mobile deveice ေပၚတြင္ run သည္နွင့္ Emulator တခုုေပၚတြင္ run သည္မွာ မည္သိုု ့မ်ွ မျခားနားလွပါ။ Mobile device တခုုကဲ့သိုု ့လုုပ္ေဆာင္နုုိင္ေအာင္ တီထြင္ထားတာမ်ဳိးျဖစ္ပါတယ္။ အတုုဆိုုေသာ္လည္း devices ေပၚတြင္ Machine အလႊာ တုုိင္သည့္ အထိ run ေသာ code မ်ားကိုုပင္ run ေပးနိုုင္ပါတယ္။ ဒီေန ရာမွာ က်ေနာ္ အေနနဲ ့ထပ္မံ ေဆြးေႏြးလိုုတာက Simulator နွင့္ Emulator တိုု ့ရဲ ့ကြားျခားခ်က္ပဲျဖစ္ပါတယ္။ ၄င္းတိုု ့(၂) ခုုမွာ အေခၚအေ၀ၚအားျဖင့္ နီးစပ္ေသာ္လည္း အလုုပ္လုုပ္ပုုံျခင္းမွာ အေျခခံမွစျပီး လုုံး၀ကြာျခားပါသည္။ Emulator ေတြကေတာ့ binary code ကိုု execute လုုပ္ေပးပါျခင္း ျဖစ္၍ Emulator သည္ virtual machine/ virtual device ျဖစ္ပါတယ္။ Simulator ဆိုုသည္ကေတာ့ binary code ထိေအာင္ မဆင္းဘဲ high level မွာတြင္သာလ်ွင္ code တစ္ခုု၏ လုုပ္ေဆာင္ခ်က္ကိုု တုုပဖန္တီးေပးျခင္းျဖစ္သည္။
Ref : The Basic Principle of Developing Android Applications (Sayar Win Hein)
Ye` Paing Phyo ေရးသားထားတဲ့.. MISTAKE 51 က Android အေၾကာင္းပဲ ျဖစ္ပါတယ္။
မူရင္းလင့္အေနနဲ႕ MISTAKE 51 ပါ။ Networking နဲ႕ အျခား နည္းပညာမ်ားကို မွ်ေ၀ေပးေနေသာ ကိုတင္ထြန္းလြင္ မွ တည္ေထာင္ထားေသာ ဆိုက္တစ္ခု ျဖစ္ပါသည္။
 

0 comments:

image

Lorem ipsum dolor sit

Aliquam sit amet urna quis quam ornare pretium. Cras pellentesque interdum nibh non tristique. Pellentesque et velit non urna auctor porttitor.

image

Nunc dignissim accumsan

Vestibulum pretium convallis diam sit amet vestibulum. Etiam non est eget leo luctus bibendum. Integer pretium, odio at scelerisque congue.