1. 程式人生 > >【學習筆記】Android Activity

【學習筆記】Android Activity

本部分內容參考這裡

manifest

宣告activities

需要在manifest檔案中的<application> element中增加<activity> element。<activity>的屬性中,僅有android:name是必須的,這個屬性即為這個activity對應的java類。

publish過的app,activity的名稱是不能改變的。參考這裡

<activity> 的屬性參考這裡

宣告intent filter

intent filter指明瞭activity可以執行的任務。<intent-filter> element的屬性參考

這裡。<intent-filter>必須包含<action> element。

android預定義的action可以在Intent類的文件中查到,API27

Lifecycle callbacks

注意,activity在android系統中,有get/lost focu和is/not visible兩種狀態類別.

onCreate()

必須實現這個函式。

所有僅需執行一次的初始化過程。

onStart()

activity變得可見時呼叫此函式。註冊BroadcastReceiver。

onResume()

activity此時開始與使用者互動,activity停留在該函式中直到失去使用者互動。

由於activity將在Resume state和Pause state之間切換,android在每次切換到Resume state時,都將呼叫onResume()函式。在onResume()函式中可對某些資源進行重新獲取或者初始化。這些資源應當在Pause state中得到釋放。

onPause()

activity進入Pause state,釋放資源。在onPause()中不要執行過於heavy或者耗時的操作,例如訪問資料庫或者網路,這些工作在onStop()中進行。

activity在進入Pause state後不是立即進入Stop state,而是取決於當時的情形。實際上進入Pause state後,activity可能仍可見,此時若重新變成焦點,那麼android將呼叫onResume()來還原。當activity從可見變為不可見,那麼onStop()將會被呼叫。

onStop()

當activity不可見時,將進入Stopped state。此時釋放絕大多數資源,並且進行訪問資料庫等操作。但是android系統會通過onRestart()重新進入activity,此時無需對onResume()之前的資料進行重新初始化,因為android會在Stopped state時自動儲存。

onDestroy()

在終止前的最後呼叫。可以使用isFinishing()來判斷是主動退出還是系統終止。有時當裝置衝豎直狀態切換到水平狀態時,android系統也會呼叫onDestroy()並立即呼叫onCreate()。

在Activity之間切換

使用startActivity()或者startActivityForResult()函式切換到一個新的activity上,無論採用哪種,都需要提供一個Intent物件。

若不需要有返回資料,則使用startActivity()。

若需要從activity中獲得處理的資料,那麼使用startActivityForResult()函式,並提供一個int型別的識別符號。在被呼叫的activity返回之後,通過onActivityResult()函式獲取之前所需的資料。onActivityResult()函式看起來是需要一個activity自行重寫的。

在Activity A啟動Activity B的過程中,activity的life cycle如下

(1)A的onPause()函式被呼叫。

(2)B的onCreate(), onStart(), onResume()函式被呼叫。

(3)當A在螢幕上不可見時,A的onStop()函式被呼叫。

一個activity終止有多種情況,當android系統由於資源排程而終止了處於stop狀態的activity時,android會儲存一份資料,稱為instance state。這個instance state是一個Bundle物件。但是預設的行為提供的功能非常有限,為了能夠實現activity在重建時能夠恢復資料,需要使用onSaveInstanceState()函式和ViewModel類,參考這裡。重寫onSaveInstanceState()時需要顯式呼叫super的onSaveInstanceState()以儲存view。一般要求每個View物件都有明確的android:id。

恢復activity state。恢復時android向onCreate()和onRestoreInstanceState()函式提供之前儲存的Bundle物件。若是新建立的avtivity而非恢復的,那麼此Bundle物件是null。在onCreate()中需要最先呼叫super的onCreate()函式。推薦使用onRestoreInstanceState(),此時無需檢測Bundle物件是否是null。需要最先呼叫super的onRestoreInstanceState()。