iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0

我們再從流程來看一次 Activity 的生命週期階段。

  • Destroyed
  • Resumed
  • Started
  • Created
  • Initialized

上面的條列,從 Initialized 起始,結束於 Destroyed。

通則來說,這些生命週期階段追蹤像是 Activity 出現在螢幕(Started 階段),或是使用者完全離開 Activity (Destroyed 階段)的情形。

到底 Activity 的生命週期有什麼作用?

為了回答這個,先想一下,你在使用手機時最重要的事,都會希望當下的應甪程式執行的很好、使用起來非常滑順。

我們在系統資源有限的情形下,使用了許多 Activity、Fragment。為了管理這些 Activity、Fragment,我們需要瞭解它們的狀態(生命週期階段)。

再看到一個例子,你的應用程式有一個投石車正在丟石頭的畫面。這需要使用裝置 CPU 來進行大量物理模擬運算。

這時當你爸打電話給你(有個重要來電),畫面上的這些物理速度、位置,是否有必要繼續運算?你的想法是什麼呢?

答案是,這取決於你這些物理模擬運算的目的為何。

假設,這時你想要暫停投石車正在丟石頭的動畫運作,來接聽這通來電。如果在我講完電話後回到原先應用程式,看到投石車的動畫運作已結束、完成,我可能會覺得困惑。

又假如,我有一個裝置同時管理 20 個有相同動畫運作、開啟中的應用程式。如果這 20 個應用程式都維持原本的動畫運作,固然令人驚豔。但也會造成 CPU 沉重的物理計算。若這 20 個應用程式不在畫面上,卻在背景運作大量的畫面呈現動作,將會拖累整個裝置的運作速度。

Android 作業系統(OS, operating system)不僅關注應用程式是否可見,也會為了節省電量、改善應用程式效率的目的,來關注應用程式的 Activity。Android 作業系統有時(occasionally)會 stop 和 restart 背景的應用程式。

因此,你會希望程式可以主動性(Proactive)、防禦性(Defensive)地完成上面提及的目的。

主動性意謂 Android 作業系統會清出未使用的資源。

防禦性意謂 Android 作業系統會做出 restart 應用程式等操作。


參考資料


上一篇
[Day 13] Activity 的 lifecycle - 用圖像來協助記憶生命週期
下一篇
[Day 15] Activity 的 lifecycle - 甜點應用程式 - onCreate()
系列文
[Android] 在 activity 與 fragment 身上的 lifecycle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言