暫停和恢複Activity Android,activityandroid

來源:互聯網
上載者:User

暫停和恢複Activity Android,activityandroid

暫停和恢複Activity(Pausing and Resuming an Activity)

在正常的應用程式使用,前台activity有時會被其他可視化組件遮擋,從而 造成activity的暫停。例如,當一個半透明的activity開啟時(如在一個風格對話方塊),以前的activity就暫停了。只要 activity仍然是部分可見,但目前沒有獲得焦點,它就依然處於暫停狀態。

然而,一旦activity被完全遮擋住,並且對使用者不可見了,那麼它就停止了 (這是下一課需要討論的內容)。

當你的activity進入暫停狀態,系統將對你的Activity調用 onPause()方法。在此方法中,你可以停止那些在暫停狀態時不應該繼續進行的行為(如視頻播放),或者持久化一些需要永久儲存的資訊,以使得使用者繼 續留在你的應用程式。如果使用者返回到你的activity,系統將從暫停狀態中恢複它,並調用onResume()方法。

注意:當你的activity接收到一個對onPause()的調用時,它可能 是一個跡象,表明activity將暫停一會兒,然後使用者還會返回到你的activity。然而,它通常是第一個跡象,表明使用者正在離開你的 activity。

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

暫停你的Activity(Pause Your Activity)

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

提交尚未儲存的更改,但前提是使用者希望這樣處理:當他們離開時,需要將所做的變動做一個永久地儲存(如撰寫電子郵件)。
釋放一些系統資源,例如廣播接收器,處理感應器(如GPS),或任何會影響電池壽命的資源,而與此同時你的activity又被暫停了,使用者不再需要這些 資源。

舉個例子,如果你的應用程式使用了照相機,那麼onPause()方法就是釋放它的好地方。

@Overridepublic 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暫停時被釋放的相機。

@Overridepublic 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    }}

  

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.