真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中Activity有哪些生命周期

今天就跟大家聊聊有關(guān)Android 中Activity有哪些生命周期,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的思禮網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

注意到在Activity的API中有大量的onXXXX形式的函數(shù)定義,除了我們前面用到的onCreate以外,還有onStart,onStop以及onPause等等。從字面上看,它們是一些事件回調(diào),那么次序又是如何的呢?其實這種事情,自己做個實驗最明白不過了。在做這個實驗之前,我們先得找到在Android中的Log是如何輸出的。

顯然,我們要用的是android.util.log類,這個類相當(dāng)?shù)暮唵我子茫驗樗峁┑娜且恍╈o態(tài)方法:

Log.v(String tag, String msg); //VERBOSE  Log.d(String tag, String msg); //DEBUG   Log.i(String tag, String msg); //INFO  Log.w(String tag, String msg); //WARN  Log.e(String tag, String msg); //ERROR

前面的tag是由我們定義的一個標(biāo)識,一般可以用“類名_方法名“來定義。

輸出的LOG信息,如果用Eclipse+ADT開發(fā),在LogCat中就可以看到,否則用adb logcat也行,不過我是從來都依賴于IDE環(huán)境的。

好了,現(xiàn)在我們修改前面的HelloThree代碼:

public void onStart()  ...{  super.onStart();  Log.v(TAG,"onStart");  }  public void onStop()  ...{  super.onStop();  Log.v(TAG,"onStop");  }  public void onResume()  ...{  super.onResume();  Log.v(TAG,"onResume");  }  public void onRestart()  ...{  super.onRestart();  Log.v(TAG,"onReStart");  }  public void onPause()  ...{  super.onPause();  Log.v(TAG,"onPause");  }  public void onDestroy()  ...{  super.onDestroy();  Log.v(TAG,"onDestroy");  }  public void onFreeze(Bundle outState)  ...{  super.onFreeze(outState);  Log.v(TAG,"onFreeze");  }

在HelloThreeB中也同樣增加這樣的代碼,編譯,運行一下,從logcat中分析輸出的日志。

在啟動***個界面Activity One時,它的次序是:

onCreate (ONE) - onStart (ONE) - onResume(ONE)


雖然是***次啟動,也要走一遍這個resume事件。然后,我們點goto跳到第二個Activity Two中(前一個沒有關(guān)閉),這時走的次序是:

  1. onFreeze(ONE) - onPause(ONE) - onCreate(TWO) - 
    onStart(TWO) - onResume(TWO) - onStop(ONE) 

說明,第二個Activity Two在啟動前,One會經(jīng)歷一個:凍結(jié)、暫停的過程,在啟動Two后,One才會被停止?

然后,我們再點back回到***個界面,這時走的次序是:

  1. onPause(TWO) - onActivityResult(ONE) - onStart(ONE) - 
    onRestart(ONE) - onResume(ONE) - onStop(TWO) - onDestroy(TWO) 

說明,返回時,Two沒有經(jīng)歷凍結(jié)就直接暫停了,在One接收參數(shù),重啟后,Two就停止并被銷毀了。***,我們點一下Exit退出應(yīng)用,它的次序是:

onPause(ONE) - onStop(ONE) - onDestroy(ONE)

說明如果我們用了finish的話,不會有freeze,但是仍會經(jīng)歷pause - stop才被銷毀。

這里有點疑問的是:為什么回來時先是Start才是Restart?可是文檔中的圖上畫的卻是先restart再start的?。坎贿^,后面的表格中的描述好象是正確的,start后面總是跟著resume(如果是***次)或者restart(如果原來被stop掉了,這種情況會在start與resume 中插一個restart)。

  • Android Button應(yīng)用法則

  • Android模擬SD卡實現(xiàn)方法解析

  • Android onKey操作方式介紹

  • Android消息傳遞應(yīng)用功能解析

  • Android繪圖具體應(yīng)用方式總結(jié)

下面不跑例子了,看看Android Activity生命周期的文檔吧。

1.Android用Activity Stack來管理多個Activity,所以呢,同一時刻只會有最頂上的那個Activity是處于active或者running狀態(tài)。其它的Activity都被壓在下面了。

2. 如果非活動的Activity仍是可見的(即如果上面壓著的是一個非全屏的Activity或透明的Activity),它是處于paused狀態(tài)的。在系統(tǒng)內(nèi)存不足的情況下,paused狀態(tài)的Activity是有可被系統(tǒng)殺掉的。只是不明白,如果它被干掉了,界面上的顯示又會變成什么模樣?看來下回有必要研究一下這種情況了。

3.幾個事件的配對可以比較清楚地理解它們的關(guān)系。Create與Destroy配成一對,叫entrie lifetime,在創(chuàng)建時分配資源,則在銷毀時釋放資源;往上一點還有Start與Stop一對,叫visible lifetime,表達(dá)的是可見與非可見這么一個過程;最頂上的就是Resume和Pause這一對了,叫foreground lifetime,表達(dá)的了是否處于激活狀態(tài)的過程。

4.因此,我們實現(xiàn)的Activity派生類,要重載兩個重要的方法:onCreate()進(jìn)行初始化操作,onPause()保存當(dāng)前操作的結(jié)果。

除了Activity Lifecycle以外,Android還有一個Process Lifecycle的說明:

在內(nèi)存不足的時候,Android是會主動清理門戶的,那它又是如何判斷哪個process是可以清掉的呢?文檔中也提到了它的重要性排序:

1. 最容易被清掉的是empty process,空進(jìn)程是指那些沒有Activity與之綁定,也沒有任何應(yīng)用程序組件(如Services或者IntentReceiver)與之綁定的進(jìn)程,也就是說在這個process中沒有任何activity或者service之類的東西,它們僅僅是作為一個cache,在啟動新的 Activity時可以提高速度。它們是會被優(yōu)先清掉的。因此建議,我們的后臺操作,***是作成Service的形式,也就是說應(yīng)該在Activity中啟動一個Service去執(zhí)行這些操作。

2.接下來就是background activity了,也就是被stop掉了那些activity所處的process,那些不可見的Activity被清掉的確是安全的,系統(tǒng)維持著一個 LRU列表,多個處于background的activity都在這里面,系統(tǒng)可以根據(jù)LRU列表判斷哪些activity是可以被清掉的,以及其中哪一個應(yīng)該是***被清掉。不過,文檔中提到在這個已被清掉的Activity又被重新創(chuàng)建的時候,它的onCreate會被調(diào)用,參數(shù)就是onFreeze時的那個Bundle。不過這里有一點不明白的是,難道這個Activity被killed時,Android會幫它保留著這個Bundle嗎?

3.然后就輪到service process了,這是一個與Service綁定的進(jìn)程,由startService方法啟動。雖然它們不為用戶所見,但一般是在處理一些長時間的操作(例如MP3的播放),系統(tǒng)會保護(hù)它,除非真的沒有內(nèi)存可用了。

4.接著又輪到那些visible activity了,或者說visible process。前面也談到這個情況,被Paused的Activity也是有可能會被系統(tǒng)清掉,不過相對來說,它已經(jīng)是處于一個比較安全的位置了。

5.最安全應(yīng)該就是那個foreground activity了,不到迫不得已它是不會被清掉的。這種process不僅包括resume之后的activity,也包括那些onReceiveIntent之后的IntentReceiver實例。

在Android Activity生命周期的討論中,文檔也提到了一些需要注意的事項:因為Android應(yīng)用程序的生存期并不是由應(yīng)用本身直接控制的,而是由 Android系統(tǒng)平臺進(jìn)行管理的,所以,對于我們開發(fā)者而言,需要了解不同的組件Activity、Service和IntentReceiver的生命,切記的是:如果組件的選擇不當(dāng),很有可能系統(tǒng)會殺掉一個正在進(jìn)行重要工作的進(jìn)程。

看完上述內(nèi)容,你們對Android 中Activity有哪些生命周期有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前文章:Android中Activity有哪些生命周期
文章來源:http://weahome.cn/article/godscd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部