廣大博友,看過後幫忙頂頂,謝謝大家!!!
轉載請註明: http://blog.csdn.net/richway2010/archive/2011/06/29/6574987.aspx
【博主:各位博友,網友們,大家網上好!歡迎光臨本部落格。 歡迎多多交流,多提意見,互相學習,互相進步,我們的口號是:好好學習,天天向上。】
看過很多關於activity生命週期的文章,大多都只是講明一個圖例流程,並沒有把其中原理講清楚,下面加上個人理解,分析一下它的生命週期。
跟其他手機平台的應用程式一樣,Android的應用程式的生命週期是被統一掌控的,也就是說我們寫的應用程式命運掌握在別人(系統)的手裡,我們不能改變它,只能學習並適應它。
簡單地說一下為什麼是這樣:我們手機在運行一個應用程式的時候,有可能打進來電話發進來簡訊,或者沒有電了,這時候程式都會被中斷,優先去服務電話的準系統,另外系統也不允許你佔用太多資源,至少要保證電話功能吧,所以資源不足的時候也就有可能被幹掉。
看圖:
對分析:
1、啟動Activity執行的方法:onCreate()-->onStart()-->onResume()方法,此時程式處理運行狀態。
方法原理:
onCreate: 在這裡建立介面,做一些資料的初始化工作
onStart: 到這一步變成使用者可見不可互動的
onResume: 變成和使用者可互動的,(在activity棧系統通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)
2、結束Activity執行的方法:onPause()-->onStop()-->onDestory()方法,此時程式被銷毀。
方法原理:
onPause:到這一步是可見但不可互動 的,系統會停止動畫等消耗CPU 的事情,從上文的描述已經知道,應該在這裡儲存你的一些資料,因為這個時候你的程式的優先順序降低,有可能被系統收回。在這裡儲存的資料,應該在onResume裡讀出來,注意:這個方法裡做的事情時間要短,因為下一個activity不會等到這個方法完成才啟動
onstop:變得不可見 ,被下一個activity覆蓋了
onDestroy:這是activity被幹掉前最後一個被呼叫者法了,可能是外面類調用finish方法或者是系統為了節省空間的將它暫時性的幹掉,可以用isFinishing()來判斷它,如果你有一個Progress Dialog線上程中轉動,請在onDestroy裡把他cancel掉,不然等線程結束的時候,調用Dialog的cancel方法會拋異常的。
3、onPause()-->onResume轉化原理
Activity可以經常性地在resumed和paused狀態之間切換,當activity處理運行狀態時,有新的activity運行到前台,此時原activity將被壓入棧,當前activity處於棧頂。
4、閑置很長時間的activity-->到運行狀態過程
onStop()-->onRestart()-->onStart()-->onResume()-->activity running
註:處於onPause,onstop, onDestroy,三種狀態下 activity都有可能會因為其它應用需要用記憶體,而被系統幹掉。其它狀態不會結束。