• onCreate
    • 這個狀態是短暫的、會很快的進入下一個狀態
    • 你必需實作這個方法來執行基本的初始化、並且它應該在整個 activity 生命中僅僅執行一次。
    • 你實作的 onCreate() 應該定義使用者界面以及宣告一些變數並加以實體化。
    • 讀取 savedInstanceState 之前需要檢查它是不是 null,如果是 null、表示系統正在建立新的 activity。如果不是 null、就表示正在恢復前一個 activity。
    • 相對於在這裡讀取 savedInstanceState、你也可以實作 onRestoreInstanceState,系統會在 onStart() 之後呼叫它。系統只會在有實體狀態資料時呼叫它。

 

  • onStart
    • 這個狀態是短暫的、會很快的進入下一個狀態
    • 技術上來講、當 onStart() 被呼叫之後使用者就看得見 activity 了
    • 使用者返回你的 APP 前可能離開了很久、所以最好是在 onStart() 裡檢查必要的系統功能是否可用。

 

  • onRestoreInstanceState
    • 系統只會在有實體狀態資料時呼叫這個方法、所以在此你不用檢查 savedInstanceState 是否為 null。
    • 永遠要呼叫上層類別方法它才能恢復 view 的狀態 super.onRestoreInstanceState(savedInstanceState);
    • 取回先前儲存的資訊 value = savedInstanceState.getInt(KEY);

 

  • onResume
    • Activity 可以停駐在這個狀態、以延長生命週期
    • 在恢復狀態、activity 位於前景並且可接受使用者操作(有時也被稱為 Running 狀態)。
    • 你應該重新初始化一些你在 onPause() 時釋放的元件、以及執行一些每次來到恢復狀態都必需要有的動作(好比說播放動畫、初始化當 activity 得到使用者焦點時才用得到的元件)。

 

  • onPause
    • Activity 可以停駐在這個狀態、以延長生命週期
    • 在暫停狀態、你的 activity 有部份正被另一個 activity 遮蔽,另一個 activity 在前景執行、且它是半透明或沒有覆蓋整個螢幕。已暫停的 activity 無法接受使用者互動且無法執行任何程式。
    • 這裡可以讓你停止一些在暫停狀態下、不應該繼續執行的動作(像是播放影片)、或保留任何應該永久保存的資訊(如果使用者短期內沒有返回你的 APP 的話)。
    • 停止動畫或其它消耗 CPU 的動作。
    • 提交未儲存的變更,但只在使用者能夠預期的時候才這麼作(像是電子郵件寫到一半時突然離開)。
    • 釋放系統資源,像是廣播接收、感應器(GPS),或者當你 activity 暫停之後、使用者不再需要、且任何會影響電池壽命的資源。
    • 你應該避免在 onPause() 執行佔用 CPU 的工作、像是寫入資料庫,因為這會導致下一個 activity 出現時的過場動畫變慢。
    • Activity 暫停的時候,activity 實體保持在記憶體裡、並在隨著 activity 恢復而還原。你不需要重新初始化任何元件。

 

  • onSaveInstanceState
    • 每一個 View 物件都必需以 android:id 屬性指定個別的 id,系統才能自動儲存它們的狀態。
    • 想要儲存關於 activity 狀態以外的資料、你得覆寫這個方法。
    • 儲存額外資訊的寫法 savedInstanceState.putInt(KEY, VALUE) 添加完後才執行 super.onSaveInstanceState(savedInstanceState)。
    • 當使用者離開你的 activity 系統就會呼叫這個方法、並給提供一個 Bundle 物件然後儲存。如果系統將要重建 activity 實體,同一個 Bundle 物件會被丟給 onRestoreInstanceState() 和 onCreate()。

 

  • onStop
    • Activity 可以停駐在這個狀態、以延長生命週期
    • 一但 activity 完全被遮蓋、它就會停止。
    • 在停止狀態、你的 activity 是完全看不見的,它被移到背景。activity 實體與其狀態資訊如成員變數是被保留的,但它無法執行任何程式。
    • 雖然 onPause() 會在 onStop() 之前呼叫,你應該在 onStop() 中處理較大、較佔 CPU 的作業,例如寫入資料庫。
    • 系統會在 Activity 停止時、於記憶體中保留你的 Activity 實體,所以你可能不需要實作 onStop() 和 onRestart() 甚至不需要 onStart()。你可能只需在 onPause() 停止一些動作和釋放一些資源。
    • 應該釋放幾乎所有不再需要用到的系統資源。
    • 在某些極端的案例中,系統可能會直接殺掉你的 APP、而不去呼叫 onDestroy()。所以在 onStop() 釋放可能造成記憶體洩漏的資源是很重要的。
    • Activity 停止的時候,activity 實體保持在記憶體裡、並在隨著 activity 恢復而還原。你不需要重新初始化任何元件。系統也會持續追蹤佈局中的每一個 View 的狀態,要是使用者曾在文字框裡填入資訊,這些內容會被自動保留(activity 恢復時文字框的內容還在)。所以你不需要特別去儲存或恢復它。
    • 即使系統銷毀了處於停止狀態中的 activity,它仍然保存著 View 物件的狀態(如文字框中的文字)在一個 Bundle 裡。

 

  • onRestart
    • 這個狀態是短暫的、會很快的進入 onStart 狀態
    • 只有在 activity 從停止狀態改變成恢復狀態時才會呼叫 onRestart(),所以你可以執行一些 activity 由停止狀態恢復時必要的恢復工作。
    • 很少有 APP 需要用 onRestart() 來恢復 activity 的狀態,不過,因為在 onStop() 裡基本上就應該要清除所有使用中的資源、所以你也需要在 activity 重啟時再次實例化它們。另外、你還需要在 activity 第一次啟動時實例化它們。為了這個理由、你應該用 onStart() 去對應 onStop(),因為當建立 activity 以及由停止狀態重啟 activity 兩種情況,系統都會呼叫 onStart()。

 

  • onDestroy
    • 系統會在你的 activity 從記憶體中完全移除之前呼叫它、作為最後一個信號。
    • 大部份 APP 不需要實作這一個方法,因為本地類別參照隨著 activity 被銷毀、而且你的 activity 也應該在 onPause() 和 onStop() 之中進行大部份的清理動作。
    • 如果你的 activity 在 onCreate() 時使用了背景執行緒或其它長期運行的資源,要是沒有正確將其關閉、可能會造成記憶體洩漏,你應該在 onDestroy() 當中清光它們。
    • 通常系統會在 onPause() 和 onStop() 之後才執行 onDestroy(),如果你在 onCreate() 裡呼叫 finish()、這時候系統會立即執行 onDestroy() 而不經過其它任何生命週期方法。
    • 每次使用者改變螢幕方向、你的 activity 都會被銷毀和重建。方向一改變、系統就重建前景的 activity
    • 系統會在一個 activity 處於停止狀態非常久、或正在前景執行的 activity 需要更多資源、因此清除背景程序以獲取更多記憶體的同時、銷毀已停止的 activity。
    • 如果由於系統的限制而銷毀了 activity(非正常行為),系統會用鍵值對(Key/Value Pair)組成的集合、儲存佈局中每一個物件的資訊(例如文字框裡的內容、和捲軸位置)、在一個 Bundle 物件中。這組資料稱為 “實體狀態”。

 

arrow
arrow
    文章標籤
    android App生命週期
    全站熱搜

    Will 發表在 痞客邦 留言(0) 人氣()