Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity
原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/pausing.html
在APP的正常使用過(guò)程中,在前臺(tái)工作的Activity有時(shí)可能會(huì)被其他的可視化組件擋住,而引起Activity進(jìn)入Paused狀態(tài)。舉個(gè)例子,當(dāng)一個(gè)半透明的Activity打開(kāi)后(類(lèi)似于Dialog那種風(fēng)格),那么原先的那個(gè)Activity便會(huì)進(jìn)入Paused狀態(tài)。只要Activity仍然只是部分可見(jiàn),并且它沒(méi)有獲得焦點(diǎn),那么它就一直保持在Paused狀態(tài)。
然而,只要activity一旦被全部擋住,并且不可見(jiàn),那么就會(huì)進(jìn)入Stopped狀態(tài)。
在系統(tǒng)調(diào)用Activity的onPause方法時(shí),activity隨之就進(jìn)入了paused狀態(tài),這期間允許你停止一些不應(yīng)該繼續(xù)進(jìn)行的活動(dòng)(比如視頻),還應(yīng)該對(duì)用戶(hù)的任何信息做持久化存儲(chǔ),萬(wàn)一用戶(hù)退出了APP。如果用戶(hù)從Paused狀態(tài)返回了Activity,系統(tǒng)會(huì)調(diào)用onResumed方法并回到Resumed狀態(tài)。
Note:當(dāng)Activity的onPause方法被調(diào)用,這意味著Activity可能會(huì)在Paused狀態(tài)待一會(huì),并且稍后用戶(hù)可能會(huì)再次返回到這個(gè)Activity中。無(wú)論如何,這通常是用戶(hù)離開(kāi)Activity的第一個(gè)信號(hào)。
上圖:當(dāng)一個(gè)半透明的Activity擋住了原先的Activity,系統(tǒng)會(huì)調(diào)用onPause方法,然后Activity會(huì)等在Paused狀態(tài)(1),如果在Paused狀態(tài)返回了Activity,那么系統(tǒng)會(huì)調(diào)用onResume方法(2)。
暫停Activity
當(dāng)系統(tǒng)調(diào)用了onPause方法,這從技術(shù)上說(shuō)activity當(dāng)前是部分可見(jiàn)狀態(tài),但是大多數(shù)情況下,這表示用戶(hù)離開(kāi)了Activity,并且稍后會(huì)進(jìn)入Stopped狀態(tài)。你應(yīng)該一般使用onPause方法做這些事情:
- 停止動(dòng)畫(huà)或者運(yùn)行中的活動(dòng)等這類(lèi)消耗CPU資源的行為。
- 保存沒(méi)有存儲(chǔ)的改變,但這僅限于用戶(hù)希望保存的東西(比如電子郵件的草稿)。
- 釋放系統(tǒng)資源,比如廣播接收器,正在處理中的傳感器(比如GPS),任何用戶(hù)不再需要的,可能會(huì)影響到電量的任何資源。
舉個(gè)例子,如果應(yīng)用使用了Camera,在onPause方法中最適合去釋放它。
@Override public void onPause() {super.onPause(); // Always call the superclass method first// Release the Camera because we don't need it when paused// and other activities might need to use it.if (mCamera != null) {mCamera.release()mCamera = null;} }通常情況下,并不應(yīng)該使用onPause方法來(lái)持久化存儲(chǔ)用戶(hù)的改變(比如輸入表格的用戶(hù)信息)。唯一的一點(diǎn)就是用戶(hù)希望這些數(shù)據(jù)可以自動(dòng)的存儲(chǔ)(比如起草的email)。然而,應(yīng)該避免在onPause方法中執(zhí)行高強(qiáng)度的CPU工作,比如寫(xiě)入數(shù)據(jù)庫(kù),因?yàn)樗鼤?huì)減慢切換到下一個(gè)Activity的速度(你應(yīng)該在onStop方法中做這些重量級(jí)操作)。
你應(yīng)該在onPause方法中保持相對(duì)簡(jiǎn)單的完成操作,為了可以快速過(guò)渡到下個(gè)Activity。
Note:如果activity在Paused狀態(tài),那么activity會(huì)常駐在內(nèi)存中,它會(huì)在activity恢復(fù)的時(shí)候重新被調(diào)用。你不需要重新初始化這些在任何回調(diào)函數(shù)中被重新創(chuàng)建的組件。
恢復(fù)Activity
如果用戶(hù)從Paused狀態(tài)恢復(fù)到了Resumed狀態(tài),系統(tǒng)會(huì)調(diào)用onResume方法。
應(yīng)該意識(shí)到系統(tǒng)每次調(diào)用這個(gè)方法activity就進(jìn)入了前臺(tái),包括在第一次創(chuàng)建的時(shí)候。因此,你應(yīng)該在onResume中實(shí)例化組件,然后在onPause中釋放這些組件,每次在activity進(jìn)入resumed狀態(tài)的時(shí)候執(zhí)行其必須的初始化操作(比如啟動(dòng)動(dòng)畫(huà)和activity獲取到焦點(diǎn)之后只實(shí)例化要使用的組件)。
下面這個(gè)onPause的例子是上面onResume例子的副本,所以應(yīng)該在activity暫停的時(shí)候釋放初始化過(guò)的camera對(duì)象。
@Override public void onResume() {super.onResume(); // Always call the superclass method first// Get the Camera instance as the activity achieves full user focusif (mCamera == null) {initializeCamera(); // Local method to handle camera init} } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: android sina oauth2.