android activity 生命週期

來源:互聯網
上載者:User

標籤:android   des   style   使用   os   io   strong   資料   

android activity 生命週期

1.基本知識

  在Activity從建立到銷毀的過程中需要在不同的階段調用7個生命週期方法。這7個生命週期方法的定義如下:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()

  上面7個生命週期方法分別在4個階段按著一定的順序進行調用,這4個階段如下:
  開始Activity:在這個階段依次執行3個生命週期方法:onCreate、onStart和onResume。
  Activity失去焦點:如果在Activity獲得焦點的情況下進入其他的Activity或應用程式,這時當前的Activity會失去焦點。在這一階段,會依次執行onPause和onStop方法。
  Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命週期方法:onRestart、onStart和onResume。
  關閉Activity:當Activity被關閉時系統會依次執行3個生命週期方法:onPause、onStop和onDestroy。
  如果在這4個階段執行生命週期方法的過程中不發生狀態的改變,那麼系統會按著上面的描述依次執行這4個階段中的生命週期方法,但如果在執行的過程中改變了狀態,系統會按著更複雜的方式調用生命週期方法。

  在執行的過程中可以改變系統的執行軌跡的生命週期方法是onPause和onStop。如果在執行onPause方法的過程中Activity重新獲得了焦點,然後又失去了焦點。系統將不會再執行onStop方法,而是按著如下的順序執行相應的生命週期方法:
    onPause -> onResume-> onPause
  如果在執行onStop方法的過程中Activity重新獲得了焦點,然後又失去了焦點。系統將不會執行onDestroy方法,而是按著如下的順序執行相應的生命週期方法:
    onStop -> onRestart -> onStart -> onResume -> onPause -> onStop
  詳細描述了這一過程。

從所示的Activity生命週期不難看出,在這個圖中包含了兩層迴圈,
第一層迴圈是onPause -> onResume -> onPause,
第二層迴圈是onStop -> onRestart -> onStart -> onResume -> onPause -> onStop。我們可以將這兩層迴圈看成是整合Activity生命週期中的子生命週期。第一層迴圈稱為焦點生命週期,第二層迴圈稱為可視生命週期。也就是說,第一層迴圈在Activity焦點的獲得與失去的過程中迴圈,在這一過程中,Activity始終是可見的。而第二層迴圈是在Activity可見與不可見的過程中迴圈,在這個過程中伴隨著Activity的焦點的獲得與失去。也就是說,Activity首先會被顯示,然後會獲得焦點,接著失去焦點,最後由於彈出其他的Activity,使當前的Activity變成不可見。因此,Activity有如下3種生命週期:
    整體生命週期:onCreate -> ... ... -> onDestroy。
    可視生命週期:onStop -> ... ... -> onPause。
    焦點生命週期:onPause -> onResume。
注意:在圖1所示的Activity生命週期裡可以看出,系統在終止應用程式進程時會調用onPause、onStop和onDesktroy方法。而onPause方法排在了最前面,也就是說,Activity在失去焦點時就可能被終止進程,而onStop和onDestroy方法可能沒有機會執行。因此,應該在onPause方法中儲存當前Activity狀態,這樣才能保證在任何時候終止進程時都可以執行儲存Activity狀態的代碼。
  activity主要生命週期的方法說明:
onCreate(Bundle savedInstanceState):建立activity時調用。設定在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問!
onStart():activity變為在螢幕上對使用者可見時調用。
onResume():activity開始與使用者互動時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。
onPause():activity被暫停或收回cpu和其他資源時調用,該方法用於儲存活動狀態的,也是保護現場,壓棧吧!
onStop():activity被停止並轉為不可見階段及後續的生命週期事件時調用。
onRestart():重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。
onDestroy():activity被完全從系統記憶體中移除時調用,該方法被調用可能是因為有人直接調用onFinish()方法或者系統決定停止該活動以釋放資源!

2.事件方法鏈
    2.1  進入Activity
      onCreate  -> onStart  ->  onResume
    2.2  BACK鍵
      onPause -> onStop -> onDestroy
    2.3  HOME鍵
      Home鍵退出:onPause -> onStop
      Home鍵回來:onRestart ->  onStart -> onResume 
    2.4  休眠/恢複
      休眠:  onPause
      恢複:  onResume
    2.5  旋轉螢幕
      未設定android:configChanges:
        onPause  ->  onStop  ->  onDestory  ->  onCreate  -> onStart  ->  onResume
      設定了android:configChanges="orientation|keyboardHidden":
          不會觸發生命週期方法,參見文章這裡。
    2.6  來電
      來電,顯示來電介面:
        onPause  ->  onStop
      關閉電話介面,重新回到當前Activity:
        onRestart ->  onStart -> onResume
    2.7  其他Activity
      進入下一個Activity:
        onPause  ->  onStop
      從其他Activity返回至當前Acitivity:onRestart ->  onStart -> onResume

3.與Activity生命週期結合的應用情境
    3.1  與廣播(Broadcast)結合
      在onResume註冊廣播(registerLinstener),在onPause登出廣播(unregisterLinstener)。 例如:
      做"搖一搖"功能(感應器)、監聽網路變化,就可以在onResume中註冊監聽,在onPause裡登出掉,已節省資源提高效率。
    3.2  與服務(Service)結合
      在onStart綁定服務(bindService),在onStop中取消綁定(unbindService)。 例如:
      需要通過Service定時更新UI上的資料,而Activity的可見周期在onStart與onStop之間,那麼就可以再onStart時啟動服務,在onStop時停止服務。為了節約系統資源,除了提高使用者體驗以外,開發人員應儘可能的最佳化程式。
    3.3  與Cursor結合
      使用managedQuery讓Activity幫你管理Cursor的生命週期,不用自己去close。但也有一些問題,補充兩篇文章:這裡1、 這裡2。
    3.4  釋放資源
      可以在onDestory中釋放一些資源。比如可以在onDestory時調用MediaPlayer的release。
4、注意
    4.1  所有Activity生命週期方法的實現都必須先調用其父類版本。
    4.2  由於Activity經常會暫停和恢複之間切換,所以onResume和onPause這兩個方法應當是輕量級的。
    4.3  在系統再某種緊急情況下需要回收記憶體,onStop、onDestory可能不會被調用,因此需要在onPause中把需要長期儲存的資料儲存起來。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.