Android開發入門教程(六):暫停和恢復Activity

說明:本文是我本身對官方入門教程(Training)的翻譯,僅僅是爲了記錄本身的學習過程。因爲本人英語水平過低,基本上是靠金山詞霸加上本身的理解,因此翻譯的很差。若是你有好的意見請留言,謝謝! java

暫停和恢復Activity(Pausing and Resuming an Activity) 數據庫

在正常的應用程序使用,前臺activity有時會被其餘可視化組件遮擋,從而形成activity的暫停。例如,當一個半透明的activity打開時(如在一個風格對話框),之前的activity就暫停了。只要activity仍然是部分可見,但目前沒有得到焦點,它就依然處於暫停狀態。 ide

然而,一旦activity被徹底遮擋住,而且對用戶不可見了,那麼它就中止了(這是下一課須要討論的內容)。 學習

當你的activity進入暫停狀態,系統將對你的Activity調用onPause()方法。在此方法中,你能夠中止那些在暫停狀態時不該該繼續進行的行爲(如視頻播放),或者持久化一些須要永久保存的信息,以使得用戶繼續留在你的應用程序。若是用戶返回到你的activity,系統將從暫停狀態中恢復它,並調用onResume()方法。 動畫

注意:當你的activity接收到一個對onPause()的調用時,它多是一個跡象,代表activity將暫停一下子,而後用戶還會返回到你的activity。然而,它一般是第一個跡象,代表用戶正在離開你的activity。 spa

圖1。當一個半透明的activity掩蓋了你的activity,系統就會調用onPause(),activity等在暫停狀態(1)。若是用戶返回到仍處於暫停狀態的activity,系統就會調用onResume()(2)。 翻譯

暫停你的Activity(Pause Your Activity) code

當系統爲你的activity調用onPause()時,從技術上講,你的activity仍然是部分可見的,但最多見的是代表用戶正在離開這個activity,而且它也將很快進入中止(Stopped)狀態。你應該一般使用onPause()回調:
中止動畫效果或者其餘正在進行地消耗CPU資源的行爲。

提交還沒有保存的更改,但前提是用戶但願這樣處理:當他們離開時,須要將所作的變更作一個永久地保存(如撰寫電子郵件)。
釋放一些系統資源,例如廣播接收器,處理傳感器(如GPS),或任何會影響電池壽命的資源,而與此同時你的activity又被暫停了,用戶再也不須要這些資源。 視頻

舉個例子,若是你的應用程序使用了照相機,那麼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()去將用戶的變動(如我的信息輸入形式)保存到持久化的存儲中。只有當你肯定用戶指望的是自動保存其所作的變動(如起草一個電子郵件)時,你才能夠在onPause()方法中將用戶的這種變動寫到持久化存儲中。然而,你應該避免在onPause()中執行CPU高負荷工做,如讀寫數據庫,由於它會減緩到下一個activity的過渡動做(你應該在onStop()中執行重負荷關閉動做)。

你應該保持業務量在onPause()方法相對簡單,爲了讓一個快速過渡到用戶的下一個目的地,若是你的activity其實是被中止。

注意:當你的activity暫停時,該Activity實例還駐留在內存中,而且在activity恢復時再被從新調用。你在調用任何回調方法轉變到恢復狀態時,不須要從新初始化那些已經建立了的組件,。

恢復你的Activity(Resume Your Activity)

當用戶從暫停狀態中恢復你的activity時,系統就會調用onResume()方法。

要注意的是,每次你的activity進入前景時,系統都會調用這個方法,包括當它第一次被建立的時候。所以,你應該在實現onResume()時,初始化那些你在onPause()會釋放的組件,而且執行那些每次activity進入恢復狀態時都必須完成的初始化動做(如開始動畫和初始化activity得到用戶焦點時須要使用的組件)。

下面的例子onResume()是對應的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
    }
}
相關文章
相關標籤/搜索