android Activity的onPause()與onResume()
官方文件地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume
Pause和Resume一個Activity
在一般的app使用中,前臺的activity一般是會被視覺元件所遮住的,這就會導致activity的pause。舉個例子,當一個半透明的activity開啟的時候(就像某種形式的對話方塊一樣),這之前的activity會pause。只要activity仍然部分可見,但是當下activity並不可操作,它就處在pause中了。
但是,一旦這個activity全部被遮住了,並且不可見,它就stop了。(這會在下節課討論到)
當你的activity進入pause狀態的時候,這個系統呼叫了在activity中的onPause()這個方法,onPause ()這個方法讓你能夠結束一些正在進行的任務,而這些任務在停止的時候就不能繼續了(比如一個視訊)。它也能夠讓你在使用者執意要離開你的app時,留存應該被永久儲存的資訊。如果使用者從pause的狀態又回到了你的activity,這個系統resume這個activity並且呼叫了onResume()這個方法。
注意:當你的activity收到了一個呼叫onPause()的請求,它可能表示這個activity將會被停止一段時間並且使用者很可能會再次回到你的activity來。但是這也很可能表示著使用者正在離開你的app。
圖片:當一個半透明的activity遮住了你的activity,這個系統呼叫了onPause(),並且activity在pause的狀態中等待。如果使用者當它仍然pause的時候再次回到了activity,這個系統會呼叫onResume()。
pause你的Activity
當這個系統為你的activity呼叫onPause()的時候,講道理的話,它意味著你的activity仍然是部分可見的,但是也非常有可能表示是使用者正在離開你的activity並且它之後將很快進入stop的狀態。你應該經常會在以下情況下用到onPause()。
1、 結束佔用CPU的動畫或者其他正在執行任務。
2、 提交沒有儲存的改變,但是隻有在使用者離開的時候希望這些改變被儲存的時候。
3、 釋放系統資源,就像廣播接收者,對感測器的操縱(就像GPS),或者在acitivity被pause之後和使用者不需要的時候,任何可能影響你電池壽命的資源。
舉個例子,如果你的應用用到了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()來儲存使用者的改變到永久的儲存空間中(比如表單輸入個人資訊)。唯一的你需要用onPause()來把使用者的改變儲存到永久記憶體中的情況是,當你的某縣使用者需要自動化儲存的時候(比如寫一封email)。但是在onPause()中你應該避免執行佔用大量CPU的工作,比如寫入資料庫。因為這會減慢你視覺化轉換到下一個activity的速度。(你應該把這種繁重的關閉操作放到onstop()中)
在onPause()方法中,你應該要保持一部分的操作,來保證你的activity結束的時候能夠以較快的速度跳轉到下一個使用者目的地。
注意:當你的activity被pause的時候,這個activity例項在記憶體中是佔用位置的,而且在Activity被resume的時候會被再次喚醒。你不需要在resume狀態之前的任何回撥函式中,重新初始化任何已經被建立過的元件。
resume你的Activity
當使用者從pause的狀態resume你的activity的時候,系統呼叫了onResume()的函式。
考慮到系統每次進入前臺執行的時候都會呼叫這個函式,即使是在這個activity已經被建立過的情況下。同樣的你應該實現onResume()來初始化你在onPause()中釋放的元件,並且並且執行一些其他在當activity進入resume狀態的時候需要執行的初始化(比如開啟動畫,初始化只有activity獲取了焦點後才需要使用的元件)。
接下來的onResume()的例子是與onPause()在上面的例子相配的,所以它初始化了在activity被pause的時候需要釋放的camera。
@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
}
}
相關文章
- flutter中實現仿Android端的onResume和onPause方法FlutterAndroid
- Android setUserVisibleHint-- fragment真正的onResume和onPause方法AndroidFragment
- activity生命週期的onPause和onStop
- 當前Activity的onPause執行完後,呼叫Paused介面
- ()Android中的Activity建立與週期Android
- 安卓APP活動Activity的生命週期及其各方法,注意onPause()和onStop()的區別安卓APP
- Android程式啟動與Activity顯示Android
- android UI結構 (1)Activity 與 WindowAndroidUI
- Android ActivityAndroid
- 完全理解android Activity啟動模式LauchMode (深入Activity與任務棧)Android模式
- Android進階;Activity的棧與跳轉(筆記)Android筆記
- 仿寫Android的ActivityAndroid
- Android Activity的基本理解Android
- android Fragments詳解五:與activity通訊AndroidFragment
- android-Activity Intent.setFlags()與launchModeAndroidIntent
- Android之ActivityAndroid
- Android的Activity啟動與子執行緒更新UIAndroid執行緒UI
- [Android]Activity的生命週期Android
- android中activity全屏的方法Android
- Android知識點複習1(Activity與Fragment)AndroidFragment
- Android學習之 Activity堆疊管理與控制Android
- Android四大元件——Activity——Activity的生命週期Android元件
- Android基礎之Activity 執行模式與回退棧Android模式
- Android Activity 重建之狀態儲存與恢復Android
- Android-Activity的啟動模式Android模式
- Android Activity的啟動過程Android
- Android切換Activity的動畫效果Android動畫
- Android的Task和Activity相關Android
- 詳解 Android 的 Activity 元件【Z】Android元件
- 【筆記】【Android】Activity的Task模式筆記Android模式
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- Android Activity是如何啟動的?Activity的生命週期是如何呼叫的?Android
- Android之Activity全面解析Android
- Android Activity生命週期Android
- Android Apt之Activity RouteAndroidAPT
- Android退出多個ActivityAndroid
- Android Activity那點事Android