天天看點

Activity的生命周期及加載模式1.Activity的生命周期2.Activity的加載模式

          當Activity運作時,它的活動狀态是由Android以棧的形式管理的,目前活動的Activity位于棧頂。并且Activity可以類似QQ的隐身,下線,上線等等,這就是它的生命周期。

1.Activity的生命周期

Activity的生命周期大緻一共分為4種:

  • 活動狀态:位于前台,就是你能看的見
  • 暫停狀态:其他的Activity位于前台,該Activity依然可見,一般是部分可見,隻是不能獲得焦點。
  • 停止狀态:該Activity不可見,失去焦點。
  • 銷毀狀态:該Activity結束。或者所在程序被結束的時候。

具體周期的總結,我感覺這篇文章總結的挺好,我就不重複制造輪子了  總結

看完了總結,感覺都記住了,其實什麼也沒記住,畢竟有點抽象。

下面我以一個示例說明一下怎麼應用吧,我們在開發中遇到的狀況基本就4種。

  1.  正常啟動一個Activity   onCreate()  --->  onStart()  --->  onResume()
  2. Activity部分可見,(包含Dialog的Activity,按poweroff鎖屏等)onPause()  ,再回到前台 onResume()
  3.  Activity不可見,(自己主動跳轉到其他Activity或者來個電話啥的  )onPause() --> onStop()  下一步 如果重新到前台 onRestart() -->  onStart()   -->  onResume() ,如果銷毀onDestory()
  4. 可見Activity直接finish 調用   onPause() --> onStop() --->onDestory()

      結論,由于系統能直接殺死app程序(比如設定裡的強行停止),不經過onStop或onDestory,有些文章說onPause()方法是我們最大程度上保證Activity在銷毀之前能夠執行到的方法,有人說是onStop()。但是我實驗的是onStop(),

2.Activity的加載模式

Activity的加載模式能幹什麼,負責管理執行個體化、加載Activity的方式,并且可以控制Activity與Task之間的關系,不了解什麼是Task的請看這篇文章 http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html  

  • standard:标準模式(預設模式)
  • singleTop:Task頂單例模式
  • singleTask:Task内單例模式
  • singleInstance:全局單例模式。

加載模式的配置:在AndroidManifest.xml檔案中activity元素的android:launchMode屬性: standard:這種模式用啟動Activity,Android總會為目标Activity建立新的執行個體,這種模式不會建立新的Task。

singleTop:與标準模式基本一樣,不同的是,如果目标Activity在棧頂,則Android不會建立新的Activity執行個體。其他情況和标準模式一樣。

singleTask:采用這種模式加載Activity時,每個Task裡隻允許有一個該Activity的執行個體,如果要啟動的Activity不存在,則建立新的執行個體,放到棧頂;

如果要啟動的Activity已經位于棧頂,則和singleTop一樣,不建立新的執行個體,世界複用該Activity執行個體;如果要啟動的Activity存在于Task内,但是沒有在棧頂,則Android會把要啟動的Activity執行個體以上的所有Activity都移出Task,知道目标Activity位于棧頂。

singleInstance:采用這種模式加載時,一個Activity隻允許有一個Task,并且一個Task也隻有一個Activity執行個體。

說了這麼多,然而并沒有太多的卵用,你會說具體到應用中我哪知道我該用哪種加載模式呢,這得看你的需求了,舉個例子,你APP的首頁,一般情況下是用singleTask加載模式,為什麼呢,因為一般情況下,我在首頁時,我希望其他的Activity都銷毀掉,以免造成後退和其他的問題,當然背景服務除外。是以一般的Activity還是用預設的加載模式,因為我們用完自己主動就銷毀掉了。

其他的應用場景大家可以留言交流。

繼續閱讀