Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity
原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/pausing.html
在APP的正常使用過程中,在前臺工作的Activity有時可能會被其他的可視化組件擋住,而引起Activity進入Paused狀態。舉個例子,當一個半透明的Activity打開后(類似于Dialog那種風格),那么原先的那個Activity便會進入Paused狀態。只要Activity仍然只是部分可見,并且它沒有獲得焦點,那么它就一直保持在Paused狀態。
然而,只要activity一旦被全部擋住,并且不可見,那么就會進入Stopped狀態。
在系統調用Activity的onPause方法時,activity隨之就進入了paused狀態,這期間允許你停止一些不應該繼續進行的活動(比如視頻),還應該對用戶的任何信息做持久化存儲,萬一用戶退出了APP。如果用戶從Paused狀態返回了Activity,系統會調用onResumed方法并回到Resumed狀態。
Note:當Activity的onPause方法被調用,這意味著Activity可能會在Paused狀態待一會,并且稍后用戶可能會再次返回到這個Activity中。無論如何,這通常是用戶離開Activity的第一個信號。
上圖:當一個半透明的Activity擋住了原先的Activity,系統會調用onPause方法,然后Activity會等在Paused狀態(1),如果在Paused狀態返回了Activity,那么系統會調用onResume方法(2)。
暫停Activity
當系統調用了onPause方法,這從技術上說activity當前是部分可見狀態,但是大多數情況下,這表示用戶離開了Activity,并且稍后會進入Stopped狀態。你應該一般使用onPause方法做這些事情:
- 停止動畫或者運行中的活動等這類消耗CPU資源的行為。
- 保存沒有存儲的改變,但這僅限于用戶希望保存的東西(比如電子郵件的草稿)。
- 釋放系統資源,比如廣播接收器,正在處理中的傳感器(比如GPS),任何用戶不再需要的,可能會影響到電量的任何資源。
舉個例子,如果應用使用了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;} }通常情況下,并不應該使用onPause方法來持久化存儲用戶的改變(比如輸入表格的用戶信息)。唯一的一點就是用戶希望這些數據可以自動的存儲(比如起草的email)。然而,應該避免在onPause方法中執行高強度的CPU工作,比如寫入數據庫,因為它會減慢切換到下一個Activity的速度(你應該在onStop方法中做這些重量級操作)。
你應該在onPause方法中保持相對簡單的完成操作,為了可以快速過渡到下個Activity。
Note:如果activity在Paused狀態,那么activity會常駐在內存中,它會在activity恢復的時候重新被調用。你不需要重新初始化這些在任何回調函數中被重新創建的組件。
恢復Activity
如果用戶從Paused狀態恢復到了Resumed狀態,系統會調用onResume方法。
應該意識到系統每次調用這個方法activity就進入了前臺,包括在第一次創建的時候。因此,你應該在onResume中實例化組件,然后在onPause中釋放這些組件,每次在activity進入resumed狀態的時候執行其必須的初始化操作(比如啟動動畫和activity獲取到焦點之后只實例化要使用的組件)。
下面這個onPause的例子是上面onResume例子的副本,所以應該在activity暫停的時候釋放初始化過的camera對象。
@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} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:管理Activity的生命周期之暂停和恢复Activity的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: Android NDK开发入门学习笔记(