1. 程式人生 > >Android四大元件—Activity

Android四大元件—Activity

           在Android應用程式中,一個Activity通常就是一個單獨的螢幕,它上面可以顯示一些控制元件也可以監聽並處理使用者的事件做出響應。對應MVC設計模式,Activity應該屬於控制器。

          Activity的生命週期:一個Activity有三種狀態,即執行態,暫停態,停止態。通過七個控制方法來控制各種執行狀態。

            1、 onCreate :當活動第一次啟動的時候,觸發該方法,可以在此時完成活動的初始化工作。 
onCreate 方法有一個引數,該引數可以為空( null ),也可以是之前呼叫 onSaveInstanceState ()方法儲存的狀態資訊。
            2、  onStart :該方法的觸發表示所屬活動將被展現給使用者。
            3 、  onResume :當一個活動和使用者發生互動的時候,觸發該方法。
            4、  onPause :當一個正在前臺執行的活動因為其他的活動需要前臺執行而轉入後臺執行的時候,觸發該方法。這時候需要將活動的狀態持久化,比如正在編輯的資料庫記錄等。
           5、  onStop :當一個活動不再需要展示給使用者的時候,觸發該方法。如果記憶體緊張,系統會直接結束這個活動,而不會觸發 onStop 方法。 所以儲存狀態資訊是應該在onPause時做,而不是onStop時做。活動如果沒有在前臺執行,都將被停止或者Linux管理程序為了給新的活動預留足夠的儲存空間而隨時結束這些活動。因此對於開發者來說,在設計應用程式的時候,必須時刻牢記這一原則。在一些情況下,onPause方法或許是活動觸發的最後的方法,因此開發者需要在這個時候儲存需要儲存的資訊。
           6、onRestart :當處於停止狀態的活動需要再次展現給使用者的時候,觸發該方法。
           7、 onDestroy :當活動銷燬的時候,觸發該方法。和 onStop 方法一樣,如果記憶體緊張,系統會直接結束這個活動而不會觸發該方法。
·        onSaveInstanceState :系統呼叫該方法,允許活動儲存之前的狀態,比如說在一串字串中的游標所處的位置等。 
通常情況下,開發者不需要重寫覆蓋該方法,在預設的實現中,已經提供了自動儲存活動所涉及到的使用者介面元件的所有狀態資訊。

         一個Activity的啟動順序:
            onCreate()——>onStart()——>onResume()
       當另一個Activity啟動時:
            第一個Activity onPause()——>第二個Activity    onCreate()——>onStart()——>onResume() 
            ——>第一個Activity   onStop()
      當返回到第一個Activity時:
           第二個Activity onPause() ——> 第一個Activity onRestart()——>onStart()——>onResume() 
          ——>第二個Activity   onStop()——>onDestroy()

      一個Activity的銷燬順序:
          (情況一)onPause()——><Process Killed> 
          (情況二)onPause()——>onStop()——><Process Killed> 
          (情況三)onPause()——>onStop()——>onDestroy()

  每一個活動( Activity )都處於某一個狀態,對於開發者來說,是無法控制其應用程式處於某一個狀態的,這些均由系統來完成。

  但是當一個活動的狀態發生改變的時候,開發者可以通過呼叫 onXX() 的方法獲取到相關的通知資訊。

  在實現 Activity 類的時候,通過覆蓋( override )這些方法即可在你需要處理的時候來呼叫。 

         Activity棧

  上面提到開發者是無法控制Activity的狀態的,那Activity的狀態又是按照何種邏輯來運作的呢?
        這就要知道 Activity 棧。
  每個Activity的狀態是由它在Activity棧(是一個後進先出LIFO,包含所有正在執行Activity的隊
        列)中的位置決定的。
  當一個新的Activity啟動時,當前的活動的Activity將會移到Activity棧的頂部。
  如果使用者使用後退按鈕返回的話,或者前臺的Activity結束,活動的Activity就會被移出棧消亡,
        而在棧上的上一個活動的Activity將會移上來並變為活動狀態。