[Android Training視頻系列]2.2 Pausing and Resuming an Activity

來源:互聯網
上載者:User

1.主要內容
本講介紹onPause和onResume,主要分析了在onPause函數中應該執行哪些操作。

2.視頻講解

http://www.eyeandroid.com/thread-11291-1-1.html

3.翻譯參考

在正常的程式使用中,處於前台啟動並執行activity有時會被另外一些可見的組件遮擋,從而造成activity被暫停。比如,一個半透明的activity(類似一個對話方塊)被開啟,先前那個activity就會被暫停。雖然這個activity還有部分可見,但是當前的焦點不在這個activity上,因此它保持在paused狀態。

 不過,一旦這個activity被全部遮擋,處於不可見的狀態,那麼它就是被停止了。(下個教程討論) 如果你的activity要進入paused狀態,系統會調用你的activity種的onPause()方法,這個方法讓你能夠暫停那些不應該繼續啟動並執行行為(比如暫停視頻播放),或者儲存那些應該永久儲存的使用者資料。一旦使用者從paused狀態返回,系統能夠調用onResume()方法恢複以前的運行。 提示:當activity接收調用onPause()時,這可能表明activity要暫時進入paused狀態,使用者可能馬上就重新獲得activity的焦點。但是,它也是使用者離開這個activity時會調用的第一個方法。圖解:當一個半透明的activity覆蓋你的activity時,系統調用onPause(),activity就會在Paused狀態中等待(1)。系統調用onResume()方法返回activity。 暫停你的activity當系統調用onPause()方法的時候,技術上說明activity還是能部分可見的,但是大部分情況表明使用者要離開activity,它將進入Stopped狀態。你通常使用onPause()函數做下面的事:
  • 停止消耗cpu的動畫或者運行中的動作。
  • 提交未儲存的更改,但是只是儲存使用者離開後期望永久儲存的東西(比如郵件草稿)。
  • 釋放系統資源,比如廣播接收器,感應器(比如GPS),或者消耗電量的資源,這些資源是activity暫停後使用者不再需要的。
例如,如果你的程式需要使用網路攝影機,onPause()方法中是釋放它的好地方。

 
  1. @Override  
  2. public void onPause() {  
  3.     super.onPause();  // 通常先調用父類方法  
  4.   
  5.     // 釋放網路攝影機資源  
  6.     if (mCamera != null) {  
  7.         mCamera.release()  
  8.         mCamera = null;  
  9.     }  
  10. }  

通常情況下,你不需要使用onPause()方法儲存使用者的修改(比如填寫資訊的表單)到固定儲存空間。只有在使用者真的期望自動儲存資料(比如郵件草稿)的時候才需要在onPause()方法中儲存。你應該盡量避免在onPause()方法中讓CPU進行密集的工作,比如寫入資料到資料庫,因為這樣會減慢你進入下一個activity的速度(你應該在onStop()中執行這些高負載的關閉操作)。 如果你的activity確實需要被停止話,你應該保持你onPause()方法盡量的簡單,這樣能夠保證快速的轉換到使用者的下一個目的地。 提示:當你的activity已經被paused,這個activity執行個體會被保持在記憶體中,當activity需要被恢複的時候被調用。你不需要再重新初始化組件。 恢複你的activity

當使用者從Paused狀態恢複你的activity的時候,系統調用onResume()函數。 需要瞭解的是activity每次進入前台都會調用這個方法,包括activity被第一次建立的時候。這樣的話,你必須在onResume()方法中初始化那些onPause()中釋放的組件,並且執行任何需要在Resumed狀態中需要的初始化工作。(比如開始動畫和初始化activity前台狀態需要的組件) 下面的例子和上面onPause()的例子相對應,這裡初始化暫停時釋放的網路攝影機資源。 
  1. @Override  
  2. public void onResume() {  
  3.     super.onResume();  // 調用父類方法  
  4.   
  5.     // 當activity取得使用者焦點時取得網路攝影機執行個體  
  6.     if (mCamera == null) {  
  7.         initializeCamera(); // 網路攝影機初始化的本地方法  
  8.     }  
  9. }  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.