<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Android應(yīng)用的生命周期

    Posted on 2009-11-04 15:59 瘋狂 閱讀(762) 評(píng)論(1)  編輯  收藏 所屬分類: android
           在大部份情況下,每個(gè)Android應(yīng)用都將運(yùn)行在自己的Linux進(jìn)程當(dāng)中。當(dāng)這個(gè)應(yīng)用的某些代碼需要執(zhí)行時(shí),進(jìn)程就會(huì)被創(chuàng)建,并且將保持運(yùn)行,直到該進(jìn)程不再需要,而系統(tǒng)需要釋放它所占用的內(nèi)存,為其他應(yīng)用所用時(shí),才停止。

     

            Android一個(gè)重要并且特殊的特性就是,一個(gè)應(yīng)用的進(jìn)程的生命周期不是由應(yīng)用自身直接控制的,而是由系統(tǒng),根據(jù)運(yùn)行中的應(yīng)用的一些特征來決定的,包括:這些應(yīng)用對(duì)用戶的重要性、系統(tǒng)的全部可用內(nèi)存。

             對(duì)于應(yīng)用開發(fā)者來說,理解不同的應(yīng)用組件(特別是Activity、Service、Intent Receiver)對(duì)應(yīng)用進(jìn)程的生命周期的影響,這是非常重要的。如果沒有正確地使用這些組件,將會(huì)導(dǎo)致當(dāng)應(yīng)用正在處理重要的工作時(shí),進(jìn)程卻被系統(tǒng)消毀的后果。

            對(duì)于進(jìn)程生命周期,一個(gè)普遍的錯(cuò)誤就是:當(dāng)一個(gè)Intent Receiver在它的onReceiveIntent()方法中,接收到一個(gè)intent后,就會(huì)從這個(gè)方法中返回。而一旦從這個(gè)方法返回后,系統(tǒng)將會(huì)認(rèn)為這個(gè)Intent Receiver不再處于活動(dòng)狀態(tài)了,也就會(huì)認(rèn)為它的宿主進(jìn)程不需要了(除非宿主進(jìn)程中還存在其它的應(yīng)用組件)。從而,系統(tǒng)隨時(shí)都會(huì)消毀這個(gè)進(jìn)程,收回內(nèi)存,并中止其中還在運(yùn)行的子線程。問題的解決辦法就是,在IntentReceiver中,啟動(dòng)一個(gè)Service,這樣系統(tǒng)就會(huì)知道在這個(gè)進(jìn)程中,還有活動(dòng)的工作正在執(zhí)行。

             為了決定在內(nèi)存不足情況下消毀哪個(gè)進(jìn)程,Android會(huì)根據(jù)這些進(jìn)程內(nèi)運(yùn)行的組件及這些組件的狀態(tài),把這些進(jìn)程劃分出一個(gè)“重要性層次”。這個(gè)層次按順序如下:

           1、前端進(jìn)程是擁有一個(gè)顯示在屏幕最前端并與使用者做交互的Activity(它的onResume已被調(diào)用)的進(jìn)程,也可能是一個(gè)擁有正在運(yùn)行的IntentReceiver(它的onReceiveIntent()方法正在運(yùn)行)的進(jìn)程。在系統(tǒng)中,這種進(jìn)程是很少的,只有當(dāng)內(nèi)存低到不足于支持這些進(jìn)程的繼續(xù)運(yùn)行,才會(huì)將這些進(jìn)程消毀。通常這時(shí)候,設(shè)備已經(jīng)達(dá)到了需要進(jìn)行內(nèi)存整理的狀態(tài),為了保障用戶界面不停止響應(yīng),只能消毀這些進(jìn)程;

          2、可視進(jìn)程是擁有一個(gè)用戶在屏幕上可見的,但并沒有在前端顯示的Activity(它的onPause已被調(diào)用)的進(jìn)程。例如:一個(gè)以對(duì)話框顯示的前端activity在屏幕上顯示,而它后面的上一級(jí)activity仍然是可見的。這樣的進(jìn)程是非常重要的,一般不會(huì)被消毀,除非為了保障所有的前端進(jìn)程正常運(yùn)行,才會(huì)被消毀。

           3、服務(wù)進(jìn)程是擁有一個(gè)由startService()方法啟動(dòng)的Service的進(jìn)程。盡管這些進(jìn)程對(duì)于使用者是不可見的,但他們做的通常是使用者所關(guān)注的事情(如后臺(tái)MP3播放器或后臺(tái)上傳下載數(shù)據(jù)的網(wǎng)絡(luò)服務(wù))。因此,除非為了保障前端進(jìn)程和可視進(jìn)程的正常運(yùn)行,系統(tǒng)才會(huì)消毀這種進(jìn)程。

          4、后臺(tái)進(jìn)程是擁有一個(gè)用戶不可見的Activity(onStop()方法已經(jīng)被調(diào)用)的進(jìn)程。這些進(jìn)程不直接影響用戶的體驗(yàn)。如果這些進(jìn)程正確地完成了自己的生命周期(詳細(xì)參考Activity類),系統(tǒng)會(huì)為了以上三種類型進(jìn)程,而隨時(shí)消毀這種進(jìn)程以釋放內(nèi)存。通常會(huì)有很多這樣的進(jìn)程在運(yùn)行著,因些這些進(jìn)程會(huì)被保存在一個(gè)LRU列表中,以保證在內(nèi)存不足時(shí),用戶最后看到的進(jìn)程將在最后才被消毀。

          5、空進(jìn)程是那些不擁有任何活動(dòng)的應(yīng)用組件的進(jìn)程。保留這些進(jìn)程的唯一理由是,做為一個(gè)緩存,在它所屬的應(yīng)用的組件下一次需要時(shí),縮短啟動(dòng)的時(shí)間。同樣的,為了在這些緩存的空進(jìn)程和底層的核心緩存之間平衡系統(tǒng)資源,系統(tǒng)會(huì)經(jīng)常消毀這些空進(jìn)程。

          當(dāng)要對(duì)一個(gè)進(jìn)程進(jìn)行分類時(shí),系統(tǒng)會(huì)選擇在這個(gè)進(jìn)程中所有活動(dòng)的組件中重要等級(jí)最高的那個(gè)做為依據(jù)。可以參考Activity、Service、IntentReceiver文檔,了解這些組件如何影響進(jìn)程整個(gè)生命周期的更多細(xì)節(jié)。這些類的文檔都對(duì)他們?nèi)绾斡绊懰麄兯鶎俚膽?yīng)用的整個(gè)生命周期,做了詳細(xì)的描述。

    轉(zhuǎn)載地址:http://hi.baidu.com/weiyousheng/blog/item/c56fa81940f1bd72dbb4bd55.html

    評(píng)論

    # re: Android應(yīng)用的生命周期  回復(fù)  更多評(píng)論   

    2010-01-27 16:10 by 過河卒
    貌似是某書里面的原話.
    主站蜘蛛池模板: 国产男女爽爽爽免费视频| 亚洲色大成网站www永久一区| 人人玩人人添人人澡免费| 黄页视频在线观看免费| 国产亚洲福利在线视频| 亚洲欧洲精品在线| 亚洲AV日韩精品久久久久久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 51在线视频免费观看视频| 免费毛片在线看不用播放器| 精品一区二区三区免费毛片| 亚洲依依成人亚洲社区| 亚洲中文字幕无码爆乳app| 久久精品亚洲AV久久久无码| 亚洲国产美女在线观看| 亚洲一级高清在线中文字幕| 亚洲视频在线观看视频| 91亚洲精品视频| 久久久久精品国产亚洲AV无码| 亚洲欧洲国产综合| 国产成人亚洲综合网站不卡| 国产成人亚洲综合一区| 亚洲AV无码国产剧情| 香蕉视频免费在线播放| 在线毛片片免费观看| 免费人成视频在线观看网站| 91成年人免费视频| 精品久久免费视频| 久久久久亚洲精品无码网址| 亚洲VA中文字幕无码毛片| 亚洲成人福利在线| 亚洲日本在线电影| 亚洲精品视频免费观看| 无码A级毛片免费视频内谢| 成人免费视频小说| 亚洲人成网站观看在线播放| 亚洲AV成人片色在线观看| 亚洲午夜福利在线视频| 一级全免费视频播放| 69式互添免费视频| 久久精品国产亚洲5555|