暫停和恢復(fù)Activity Android
暫停和恢復(fù)Activity(Pausing and Resuming an Activity)
在正常的應(yīng)用程序使用,前臺activity有時會被其他可視化組件遮擋,從而 造成activity的暫停。例如,當一個半透明的activity打開時(如在一個風格對話框),以前的activity就暫停了。只要 activity仍然是部分可見,但目前沒有獲得焦點,它就依然處于暫停狀態(tài)。
然而,一旦activity被完全遮擋住,并且對用戶不可見了,那么它就停止了 (這是下一課需要討論的內(nèi)容)。
當你的activity進入暫停狀態(tài),系統(tǒng)將對你的Activity調(diào)用 onPause()方法。在此方法中,你可以停止那些在暫停狀態(tài)時不應(yīng)該繼續(xù)進行的行為(如視頻播放),或者持久化一些需要***保存的信息,以使得用戶繼 續(xù)留在你的應(yīng)用程序。如果用戶返回到你的activity,系統(tǒng)將從暫停狀態(tài)中恢復(fù)它,并調(diào)用onResume()方法。
注意:當你的activity接收到一個對onPause()的調(diào)用時,它可能 是一個跡象,表明activity將暫停一會兒,然后用戶還會返回到你的activity。然而,它通常是***個跡象,表明用戶正在離開你的 activity。
圖 1。當一個半透明的activity掩蓋了你的 activity,系統(tǒng)就會調(diào)用onPause(),activity等 在暫停狀態(tài)(1)。如果用戶返回到仍處于暫停狀態(tài)的 activity,系統(tǒng)就會調(diào)用onResume()(2)。
暫停你的Activity(Pause Your Activity)
當系統(tǒng)為你的activity調(diào)用onPause()時,從技術(shù)上講,你的 activity仍然是部分可見的,但最常見的是表明用戶正在離開這個activity,并且它也將很快進入停止(Stopped)狀態(tài)。你應(yīng)該通常使用 onPause()回調(diào):
停止動畫效果或者其他正在進行地消耗CPU資源的行為。
提交尚未保存的更改,但前提是用戶希望這樣處理:當他們離開時,需要將所做的變動做一個***地保存(如撰寫電子郵件)。
釋放一些系統(tǒng)資源,例如廣播接收器,處理傳感器(如GPS),或任何會影響電池壽命的資源,而與此同時你的activity又被暫停了,用戶不再需要這些 資源。
舉個例子,如果你的應(yīng)用程序使用了照相機,那么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()去將用戶的變更(如個人信息輸入形 式)保存到持久化的存儲中。只有當你確定用戶期望的是自動保存其所做的變更(如起草一個電子郵件)時,你才可以在onPause()方法中將用戶的這種變 更寫到持久化存儲中。然而,你應(yīng)該避免在onPause()中執(zhí)行CPU高負荷工作,如讀寫數(shù)據(jù)庫,因為它會減緩到下一個activity的過渡動作(你 應(yīng)該在onStop()中執(zhí)行重負荷關(guān)閉動作)。
你應(yīng)該保持業(yè)務(wù)量在onPause()方法相對簡單,為了讓一個快速過渡到用戶 的下一個目的地,如果你的activity實際上是被停止。
注意:當你的activity暫停時,該Activity實例還駐留在內(nèi)存中, 并且在activity恢復(fù)時再被重新調(diào)用。你在調(diào)用任何回調(diào)方法轉(zhuǎn)變到恢復(fù)狀態(tài)時,不需要重新初始化那些已經(jīng)創(chuàng)建了的組件,。
恢復(fù)你的Activity(Resume Your Activity)
當用戶從暫停狀態(tài)中恢復(fù)你的activity時,系統(tǒng)就會調(diào)用 onResume()方法。
要注意的是,每次你的activity進入前景時,系統(tǒng)都會調(diào)用這個方法,包括 當它***次被創(chuàng)建的時候。因此,你應(yīng)該在實現(xiàn)onResume()時,初始化那些你在onPause()會釋放的組件,并且執(zhí)行那些每次activity 進入恢復(fù)狀態(tài)時都必須完成的初始化動作(如開始動畫和初始化activity獲得用戶焦點時需要使用的組件)。
下面的例子onResume()是對應(yīng)的onPause()上面的例子,所以它 初始化activity暫停時被釋放的相機。
- @Override
- public void onResume() {
- super.onResume(); // Always call the superclass method first
- // Get the Camera instance as the activity achieves full user focus
- if (mCamera == null) {
- initializeCamera(); // Local method to handle camera init
- }
- }
本文鏈接:http://www.cnblogs.com/xiaochao1234/archive/2014/08/08/3898559.html