新聞中心
Android應(yīng)用程序里提供的Eclipse插件使得運(yùn)行我們的程序非常簡單。選擇Run > Open Run Dialog菜單;你會看到一個(gè)對話框,在這個(gè)對話框中就像配置J2ME運(yùn)行環(huán)境一下,配置一個(gè)Luncher。

成都服務(wù)器托管,創(chuàng)新互聯(lián)建站提供包括服務(wù)器租用、成都二樞機(jī)房、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、國際域名空間等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:13518219792
大功告成!點(diǎn)擊run按鈕,Androi模擬器將運(yùn)行。當(dāng)模擬器啟動(dòng)完成你將看到你的程序。到這里我們就完成了!按照正常思路,一定會想,程序入口點(diǎn)在哪里呢?為什么會從這個(gè)Activity 啟動(dòng)呢?
現(xiàn)在用我們自己的最容易理解的方式來表述:這是因?yàn)楫?dāng)啟動(dòng)這個(gè)程序的映像文件時(shí),會發(fā)送一個(gè)事件對象Intent, 帶有MAIN的行為屬性,而自動(dòng)生成的代碼及文件, 有一個(gè)AndroidManifest.xml會為HelloWorld這個(gè)Activity 配置一個(gè)事件過濾器,表明實(shí)現(xiàn)了MAIN action,LAUNCHER category的入口點(diǎn)行為。請注意其中的幾行:
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- TextView tv = new TextView(this);
- tv.setText("Hello, Android");
- setContentView(tv);
- }
在多數(shù)情況下, 每個(gè)Android應(yīng)用程序運(yùn)行在自己的Linux進(jìn)程中. 當(dāng)一個(gè)應(yīng)用的某段code需要運(yùn)行的時(shí)候這個(gè)進(jìn)程將會被創(chuàng)建, 直到不再需要該應(yīng)用或系統(tǒng)要為其他的應(yīng)用釋放內(nèi)存的時(shí)候才停止.
一個(gè)非常重要且少有的特性是, 應(yīng)用進(jìn)程的存活時(shí)間不是由這個(gè)應(yīng)用直接控制的. 而是由系統(tǒng)決定的, 系統(tǒng)會根據(jù)每個(gè)已知的正在運(yùn)行的應(yīng)用情況來定奪, 包括, 該應(yīng)用對用戶的重要性和系統(tǒng)全部可用內(nèi)存.
對于開發(fā)人員來講, 了解每個(gè)應(yīng)用組件(尤其是, Activity, Service, 和IntentReceiver)對于應(yīng)用進(jìn)程存活時(shí)間的影響是非常重要的. 如果沒有正確使用, 可能會導(dǎo)致應(yīng)用進(jìn)程在處理重要工作的時(shí)候被系統(tǒng)殺掉.
在對應(yīng)用進(jìn)程生命周期的理解中, 一個(gè)典型的錯(cuò)誤就是當(dāng)一個(gè)IntentReceiver 接收到Intent 之后, 會在自己的onReceiveIntent()方法中開起一個(gè)線程。而后return這個(gè)方法. 一旦這個(gè)方法return, 系統(tǒng)會認(rèn)為這個(gè)IntentReceiver 不在處于活躍狀態(tài), 也就認(rèn)為他的宿主進(jìn)程不再需要(除非還包有其他活躍的應(yīng)用組件)。
以至于當(dāng)系統(tǒng)需要回收內(nèi)存的時(shí)候會隨時(shí)釋kill掉這個(gè)進(jìn)程, 中止其中的子線程. 解決這個(gè)問題的辦法是在IntentReceiver中啟動(dòng)一個(gè)Service, 這樣系統(tǒng)會知道在這個(gè)進(jìn)程中還有活躍的任務(wù)需要完成. 為了決定在內(nèi)存較低的時(shí)候殺掉哪個(gè)進(jìn)程, Android應(yīng)用程序會根據(jù)運(yùn)行在這些進(jìn)程內(nèi)的組件及他們的狀態(tài)把進(jìn)程劃分成一個(gè)"重要程度層次". 其重要的程度按以下規(guī)則排序:
前端進(jìn)程可以是一個(gè)持有運(yùn)行在屏幕最前端并與用戶交互的Activity的進(jìn)程(onResume方法被調(diào)用時(shí)),也可以是持有一個(gè)正在運(yùn)行的IntentReceiver(也就是說他正在執(zhí)行自己的onReceiveIntent方法)的進(jìn)程。
在系統(tǒng)中, 只會有少數(shù)這樣的進(jìn)程, 并且除非內(nèi)存已經(jīng)低到不夠這些進(jìn)程運(yùn)行, 否則系統(tǒng)不會主動(dòng)殺掉這些進(jìn)程. 這時(shí), 設(shè)備通常已經(jīng)達(dá)到了需要內(nèi)存整理的狀態(tài), 所以殺掉這些進(jìn)程是為了不讓用戶界面停止響應(yīng)。
名稱欄目:進(jìn)行對Android應(yīng)用程序全解析
瀏覽路徑:http://www.dlmjj.cn/article/cojoedg.html


咨詢
建站咨詢
