編輯:關於Android編程
暫停和恢復Activity(Pausing and Resuming an Activity)
一個Activity是一個應用程序組件,提供一個屏幕,用戶可以用來交互為了完成某項任務,例如撥號、拍照、發送email、看地圖。每一個activity被給予一個窗口,在上面可以繪制用戶接口。窗口通常充滿屏幕,但也可以小於屏幕而浮於其它窗口之上。
一個應用程序通常由多個activities組成,他們通常是松耦合關系。通常,一個應用程序中的activity被指定為"main"activity,當第一次啟動應用程序的時候呈現給用戶的那個activity。每一個activity然後可以啟動另一個activity為了完成不同的動作。每一次一個activity啟動,前一個activity就停止了,但是系統保留activity在一個棧上(“back stack”)。當一個新activity啟動,它被推送到棧頂,取得用戶焦點。Back Stack符合簡單“後進先出”原則,所以,當用戶完成當前activity然後點擊back按鈕,它被彈出棧(並且被摧毀),然後之前的activity恢復。
當一個activity因新的activity啟動而停止,它被通知這種狀態轉變通過activity的生命周期回調函數。有許多回調函數一個activity可能會收到,源於它自己的狀態變化-無論系統創建它、停止它、恢復它、摧毀它-並且每個回調提供你完成適合這個狀態的指定工作的機會。例如,當停止的時候,你的activity應該釋放任何大的對象,例如網絡數據庫連接。當activity恢復,你可以重新獲得必要的資源和恢復被中斷的動作。這些狀態轉換都是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()方法就是釋放它的好地方。
@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 } }
以上內容是小編給大家介紹的Android Activity暫停和恢復的相關知識,希望對大家有所幫助!
本篇開始分析按鍵消息事件分發(PS:本篇文章中源碼均是android 6.0,請知曉)先看下Agenda:ViewRootImpl中的dispatchInputEvent
一直用的android手機,用過這麼多的app,平時也會遇到有趣的通知提醒,在這裡先總結兩種吧,notification和圖標數字,有的以後看到再研究。還有,推廣一下哈,
打開微信讀書,點擊“我”進入個人界面; 微信讀書查看好友排名方法 點擊個人中心的好友排名,就可以進入到讀書排行榜; 微
1. SurfaceView的定義通常情況程序的View和用戶響應都是在同一個線程中處理的,這也是為什麼處理長時間事件(例如訪問網絡)需要放到另外的線程中去(防止阻塞當前