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 } }
android Activity的onPause()與onResume()