在activities,apps之間往返時,例如user切換app,突然有來電等
使得原本的activity暫時不顯示在當前螢幕時,被稱為putting the activity into the background
當一個被放在background的activity不應該過度消耗系統資源與電力
所以我們可以利用lifecycles來將運作中的activity暫停
關於效能也是同樣的,如果user開了過多的app,許多不在當前螢幕,已在background的app還不斷消耗系統資源的話,
整個系統都會被拖慢
重新執行app,再按Home鍵將app放至後台,這時觀察lifecycle
會看到activity先onPause(),然後onStop()
使用最近程式切換到其它app,再切回來,觀察lifecycle
一樣是onPause() -> onStop() -> onRestart() -> onStart() -> onResume()的循環
最重要的是在onStop(),onStart() 這二個方法
視需求在丟到background的時候,override onStop()
視需求在帶回foreground的時候,override onStart()
onRestart()類似onCreate(),都是在activity可見之前被呼叫執行
在onStart()將activity顯示於畫面:visible
,接著onResume()聚焦:focus
(其實不太懂這意思,先理解是像開機,app也是打開後等一下下就可以開始操作了)
以上這個部分被稱為 interactive lifecycle
然後app放去background時,先在onPause()失去焦點:lost focus
,接著在onStop()消失在目前螢幕:no longer visible
在聚焦focus與可見visible的差別,就是讓activity可以介於隱約但沒有完全顯示在螢幕上
如範例app,當按下分享鍵時,另一個sharing activity跳出顯示在下半螢幕,原activity畫面略暗並顯示於上半螢幕
此時lifecycle被呼叫的是onPause(),後面並沒有接著onStop()
在呼叫onPause(),activity lost focus之後,就不能操作此activity了
為何要區分這樣的lifecycle?因為可能有當activity進入onPause()時,還要運行或停止的動作,這時就可以寫在onPause()中
但要注意在此的動作必須是輕度的,因為onPause()會影響其它內容顯示,例如當操作app時,有來電,此時activity就要進入onPause(),再顯示來電,如果onPause()寫一堆東西,可能就會delay顯示來電
再觀察點掉sharing activity,回到原本app的activity,這時就呼叫了onResume()