android筆記 Activity

1.介紹Activity的方法

finish()和 finishActivity()


2.狀態

resumed:Activity在前臺而且有用戶焦點

stopped:Activity被覆蓋(在後臺),這時Activity的狀態還被保留,數據還在,但已經不再依附於window manager

paused:Activity被部分覆蓋或覆蓋者部分透明


3.生命週期函數

onStart:Activity將要成爲可見的(在可見之前被調用)

onResumed:Activity已經可見(可以和用戶交互前被調用)

onPause:其他Activity獲得焦點

onStop:Activity不再可見

在生命週期函數中,必須在做任何事之前調用父類的實現(super.XX)

Activity對資源的持有一直保持到onStop()方法,Pause和Stop時依然持有資源。在onStop方法裏釋放資源,因此,對廣播接收器的釋放應該在onStop()方法裏

onResume和onPause是可見週期中的方法,經常轉化,因此裏面寫的代碼應該是輕量級的,避免用戶等待

onPause方法是Activity被銷燬前被保證調用的最後一個方法,如果因爲緊急情況系統要覆蓋內存,onStop和onDestroy方法都不會被調用,因此,需要在這個方法中保存重要的持久數據


4.保存關於Activity的狀態信息

Activity在被毀壞前,系統會調用它的onSaveInstanceState()方法,系統提供一個Bundle對象,你通過鍵值對的方法存入信息。當這個Activity被系統銷燬然後用戶又重新回到這個Activity時,系統會重建這個Activity,將這個Bundle對象傳給onCreate()和onRestoreInstanceState()方法。

onSaveInstanceState()方法不一定被調用,比如用戶點擊了Back鍵。

即使你不不寫onSaveInstanceState()方法,Activity也會調用它默認的onSaveInstanceState()方法,這個方法會讓每個View將它們要保存的數據提交上來保存。每個Widget都適當地實現了這個方法,比如EditView會保存用戶輸入。但是,只有擁有你提供了ID的組件纔會提供要保存的數據。

你可以關閉組件保存狀態的功能,通過XML佈局裏的屬性設置,  android:saveEnabled attribute to "false",或者調用setSaveEnabled()方法。

因爲onSaveInstanceState()不保證一定被調用,你只應該使用onSaveInstanceState()去保存一些和UI狀態有關的信息,持久化的信息保存應該放在onPause()方法裏。


5.多個Activity生命週期的重疊

在第一個Activity被第二個Activity替換時,可能發生生命週期函數的重疊。第二個開始創建時,第一個還沒有完全停止。因此如果第二個要讀取第一個保存的數據,那麼第一個保存數據的操作應該在onPause裏進行而不能在onStop裏進行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章