close

activity的生命週期很重要

一個app寫的好不好這佔了非常多的部分

 

1. 官網http://developer.android.com/training/basics/activity-lifecycle/starting.html#lifecycle-states

activity啟動時會先執行onCreate()
然後快速執行onStart()
之後就在onResume()內了
停止時執行onPause()
接著是onStop()
最後執行onDestroy()銷毀

 

01.png

 

2. 在寫的時候要注意
a. 不會因為電話或切換其他app導致crash
b. 沒啟動時不消耗系統資源
c. 不會在一段時間沒用後讓user進度遺失
d. 不會在旋轉螢幕時讓user進度遺失

02.png

 

3. 它有幾個對應的主要狀態

Resumed
activity在前景並且可與使用者互動(也可稱作running狀態)

Paused
別的非全螢幕activity出現在當下activity之上(例如activity dialog),
被暫停的activity不能接受user輸入或執行code,
但還是存在memory之中, 且所有的state(像是member variables)都還保留
且還在在window manager內
但是當系統在low memory時可能會被回收
http://developer.android.com/training/basics/activity-lifecycle/pausing.html

Stopped
該activity完全看不見
不能執行code, 但還是存在memory之中, 且所有的state都還保留
但不在window manager內
當系統需要memory時就會直接被回收
http://developer.android.com/training/basics/activity-lifecycle/stopping.html

03.png

 

4. 最後介紹一下各個callback

onCreate():
一開始activity就會執行
通常在這邊會作初始化動作
或是回復之前的狀態
像是findViewById等等

onRestart():
從onStop()回來時會被呼叫
然後進入onStart()
用在一開始不需要執行
但是復原時要執行的時候

onStart():
從onCreate()和onStop()完後會被呼叫
對應onStop()
用在一開始和完全看不見復原時要執行的時候
而且會迅速執行不停留
這步驟通常會初始化或重啟在stop中的物件
例如重新抓取GPS

onResume():
從onStart()和onPause()完後會被呼叫
對應onPause()
之後就會處於執行狀態
這裡會來初始化在onPause暫停的組件
像是重新啟動暫停的動畫

onPause():
當別的activity到前景時被呼叫會執行
對應onResume()
此步驟通常會節省CPU和保留狀態資訊
a. 停止動畫或其他操作來節省CPU
b. 儲存user在離開時期待保存的內容(像是郵件草稿)
c. 釋放資源, broadcast receivers, sensors(像是GPS),
或其他會影響到電量的資源(相機等等)
應該避免在此時執行繁重的工作(寫DB等等),
當系統需要memony時可能會從此步回收activity

onStop():
當activity不可見時會被呼叫
對應onRestart()
這邊會執行CPU較繁重的關畢動作
像是將資料存入DB之類的
當系統需要memony時可能會從此步回收activity

onDestroy():
當activity執行finish時會被呼叫
執行後會activity被回收
當有用到背景threads
或者其他會導致leak memory的資源時
會在此步驟處理

 04.png  

arrow
arrow

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