Android學習之——Activity的生命週期與加載模式

Activity的生命週期:

在Activity在Android應用中運行時,它的活動狀態由Android以Activity棧的形式管理。當前Activity位於棧頂,每個Activity都可能從活動狀態轉爲非活動狀態,也可能由非活動狀態轉爲活動狀態。

Activity的狀態大概有4個:
  • 活動狀態:當前Activity位於前臺,可見,可以獲取焦點。
  • 暫停狀態:其他Activity位於前臺,該Activity可見,但不能獲取焦點。
  • 停止狀態:Activity不可見,失去焦點。
  • 銷燬狀態:Activity結束,或者Activity所在的Dalvik進程結束。
下面是官方Activity生命期結構圖:


從圖中可以看到被回調的方法有:
  • onCreate(Bundle savedStatus):創建Activity時被回調。只調用一次。
  • onStart():啓動Activity時被回調。
  • onRestart():重新啓動Activity時被回調。
  • onResume():恢復Activity時被回調,onStart()方法回調後一定會回調該方法。
  • onPause():暫停Activity時被回調。
  • onStop():停止Activity時被回調。
  • onDestory():銷燬Activity時被回調,之調用一次。
開發的時候,可以選擇性地去覆寫上面的方法其中最常見的覆寫方法是onCreate(Bundle savedStatus)——用於對Activity的初始化。
onPause()方法和onResume()方法在遊戲開發中很常見。

當然,要真正瞭解的話,要自己覆寫上述方法進行觀察。

Activity的4種加載模式:

這裏提到的加載模式就是在AndroidManifest.xml文件中配置Activity時用到Android:launchMode屬性,該屬性用來配置Activity的加載模式。
該屬性有4個屬性值:
  • standard:標準模式,默認的加載模式。
  • singleTop:Task頂單例模式。
  • singleTask:Task內單例模式。
  • singleInstance:全局單例模式。
在官方API中有簡單的介紹:點擊打開鏈接 任務和返回堆棧
講加載模式前先介紹點Android對Activity的管理:Android採用Task來管理多個Activity,當我們啓動一個app時,Android就會創建一個Task,然後啓動這個app的入口Activity(即AndroidManifest.xml中<intent-fliter.../>中配置爲MAIN和LAUNCHER的Activity)。這裏的Task可以理解成Activity棧,棧頂爲啓動的Activity,棧底爲其他Activity。Android的加載模式,就負責管理實例化,Activity的加載方式,並可以控制Activity與Task之間的加載關係。

下面對4中加載方式進行詳細的介紹:

1、standard模式
在使用這種模式啓動Activity時,系統會爲目標Activity創建一個新的實例,並將新的Activity添加到棧中,但不會創建新的棧。
我們可以通過Activity的getTaskId()方法來獲取當前Activity所在的Task的ID,進而進行觀察。
2、singleTop模式
這種模式在啓動Activity時,如果要被啓動的Activity已經位於棧頂,則系統不會創建新的Activity實例,而是通過調用onNewIntent()方法使用已有的Activity實例。
如果要啓動的Activity沒有位於棧頂,則系統會創建新的Activity實例,並將器加載到棧頂,此時就跟standard模式相同。
3、singleTask模式
採用這種加載模式時,同一個棧內只有一個目標Activity的實例,如果將要啓動的目標Activity不存在,系統將會創建一個Activity的實例並將其加載到棧頂;如果目標Activity已經存在且位於棧頂,此時與singleTop模式相同。這種加載模式允許其他(standard和singleTop)Activity加載到目標Activity所在的棧中,如果Activity已存在但不在棧頂,要打開目標Activity的話,則移出目標Activity上面的所以Activity,使目標Activity位於棧頂。
4、singleInstance模式
這種加載模式與SingleTask模式類似,不同點在於,系統不允許其他Activity加載到目標Activity所在的棧中,目標Activity一直是棧中唯一的成員,並且一直位於棧頂(前臺是目標Activity存在);如果目標Activity不存在的話,系統會創建一個新的棧,再創建目標Activity的實例,並將其加載到新的棧的棧頂。

總結:標準模式是默認模式,適合大多數類型的Activity,singleTop對於許多類型的Activity也是常見的發射模式;而對於singleTask和singleInstance,不適合大多數應用程序。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章