複製鏈接
請複製以下鏈接發送給好友

activity

(Android組件中最重要的四大組件之一)

鎖定
activity是Android組件中最基本也是最為常見用的四大組件之一。Android四大組件有Activity,Service服務,Content Provider內容提供,BroadcastReceiver廣播接收器
外文名
Activity
定    義
Android系統組件

activity概要説明

Activity是Android組件中最基本也是最為常見用的四大組件(Activity,Service服務,Content Provider內容提供者,BroadcastReceiver廣播接收器)之一 [1] 
Activity是一個應用程序組件,提供一個屏幕,用户可以用來交互為了完成某項任務。
Activity中所有操作都與用户密切相關,是一個負責與用户交互的組件,可以通過setContentView(View)來顯示指定控件
在一個android應用中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用户的事件做出響應。Activity之間通過Intent進行通信。

activity詳細説明

activity基本狀態

在android 中,Activity 擁有四種基本狀態
  1. Active/Running
一個新 Activity 啓動入棧後,它顯示在屏幕最前端,處理是處於棧的最頂端(Activity棧頂),此時它處於可見並可和用户交互的激活狀態,叫做活動狀態或者運行狀態(active or running)。
2. Paused
當 Activity失去焦點, 被一個新的非全屏的Activity 或者一個透明的Activity 被放置在棧頂,此時的狀態叫做暫停狀態(Paused)。此時它依然與窗口管理器保持連接,Activity依然保持活力(保持所有的狀態,成員信息,和窗口管理器保持連接),但是在系統內存極端低下的時候將被強行終止掉。所以它仍然可見,但已經失去了焦點故不可與用户進行交互。
3. Stopped
如果一個Activity被另外的Activity完全覆蓋掉,叫做停止狀態(Stopped)。它依然保持所有狀態和成員信息,但是它不再可見,所以它的窗口被隱藏,當系統內存需要被用在其他地方的時候,Stopped的Activity將被強行終止掉。
4. Killed
如果一個Activity是Paused或者Stopped狀態,系統可以將該Activity從內存中刪除,Android系統採用兩種方式進行刪除,要麼要求該Activity結束,要麼直接終止它的進程。當該Activity再次顯示給用户時,它必須重新開始和重置前面的狀態。

activity狀態轉換

當一個 Activity 實例被創建、銷燬或者啓動另外一個 Activity 時,它在這四種狀態之間進行轉換,這種轉換的發生依賴於用户程序的動作。圖1説明了 Activity 在不同狀態間轉換的時機和條件:
圖1. Activity 的狀態轉換 圖1. Activity 的狀態轉換
如上所示,Android 程序員可以決定一個 Activity 的“生”,但不能決定它的“死”,也就是説程序員可以啓動一個 Activity,但是卻不能手動的“結束”一個 Activity。當你調用 Activity.finish()方法時,結果和用户按下 BACK 鍵一樣:告訴 Activity Manager 該 Activity 實例完成了相應的工作,可以被“回收”。隨後 Activity Manager 激活處於棧第二層的 Activity 並重新入棧,同時原 Activity 被壓入到棧的第二層,從 Active 狀態轉到 Paused 狀態。例如:從 Activity1 中啓動了 Activity2,則當前處於棧頂端的是 Activity2,第二層是 Activity1,當我們調用 Activity2.finish()方法時,Activity Manager 重新激活 Activity1 併入棧,Activity2 從 Active 狀態轉換 Stoped 狀態,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被執行,Activity2 返回的數據通過data參數返回給 Activity1。
Activity棧
Android 是通過一種 Activity 棧的方式來管理 Activity 的,一個 Activity 的實例的狀態決定它在棧中的位置。處於前台的 Activity 總是在棧的頂端,當前台的 Activity 因為異常或其它原因被銷燬時,處於棧第二層的 Activity 將被激活,上浮到棧頂。當新的 Activity 啓動入棧時,原 Activity 會被壓入到棧的第二層。一個 Activity 在棧中的位置變化反映了它在不同狀態間的轉換。Activity 的狀態與它在棧中的位置關係如下圖所示:
圖2. Activity 的狀態與它在棧中的位置關係 圖2. Activity 的狀態與它在棧中的位置關係
如上所示,除了最頂層即處在 Active 狀態的 Activity 外,其它的 Activity 都有可能在系統內存不足時被回收,一個 Activity 的實例越是處在棧的底層,它被系統回收的可能性越大。系統負責管理棧中 Activity 的實例,它根據 Activity 所處的狀態來改變其在棧中的位置。

activity方法通知

下面的圖顯示了Activity的重要狀態轉換,矩形框表明Activity在狀態轉換之間的回調接口,開發人員可以重載實現以便執行相關代碼,帶有顏色的橢圓形表明Activity所處的狀態。
圖3. Activity 的狀態轉換的方法和實現 圖3. Activity 的狀態轉換的方法和實現
在上圖中,Activity有三個關鍵的循環:
1. 整個的生命週期,從onCreate(Bundle)開始到onDestroy()結束。Activity在onCreate()設置所有的“全局”狀態,在onDestory()釋放所有的資源。例如:某個Activity有一個在後台運行的線程,用於從網絡下載數據,則該Activity可以在onCreate()中創建線程,在onDestory()中停止線程。
2. 可見的生命週期,從onStart()開始到onStop()結束。在這段時間,可以看到Activity在屏幕上,儘管有可能不在前台,不能和用户交互。在這兩個接口之間,需要保持顯示給用户的UI數據和資源等,例如:可以在onStart中註冊一個IntentReceiver來監聽數據變化導致UI的變動,當不再需要顯示時候,可以在onStop()中註銷它。onStart(),onStop()都可以被多次調用,因為Activity隨時可以在可見和隱藏之間轉換。
3. 前台的生命週期,從onResume()開始到onPause()結束。在這段時間裏,該Activity處於所有 Activity的最前面,和用户進行交互。Activity可以經常性地在resumed和paused狀態之間切換,例如:當設備準備休眠時,當一個 Activity處理結果被分發時,當一個新的Intent被分發時。所以在這些接口方法中的代碼應該屬於非常輕量級的。
參考資料