android複習路之activity篇

android Activity生命週期:

1.andrid 完整的生命週期:onCreate() -> onStart()->onResume()->onPause()->onStop()->onDestory().

2.啓動Activity:onCreate()->onStart()->onResume(),Activity進入可運行的狀態。

3.Activity退居後臺並且內存不足,系統會殺掉這個Activity(但是Activity還在任務棧但是這個時候的引用指向的對象爲NULL)Actvity會重新走onCreate()->onStart()->onResume()。

4.Activiyt退居後臺:例如開啓了新的Activity或者是按下home鍵onPause()->onStop().

5.返回前臺:onRestart()->onStart()->onResume()

6.鎖屏:onPause()->onStop()

7.解鎖:onStart()->onResume()

Activity啓動的四種模式:

任務棧:棧先進後出的數據結構,任務棧也是。位於棧頂的Activity我們稱該Activity處在焦點,當按下back鍵的時候Activity會挨個出棧。並且調用onDestory()。如果棧內沒有Activity。該任務棧會被系統回收。每個app只有一個任務棧是以包名進行命名。

standard:標準啓動模式每次啓動Activity都會創建一個新的實例,並且將Activity壓入棧,不管Activity是否存在,每次啓動都會調用三個方法:onCreate()->onStart()->onResume()。

singleTop:棧頂複用模式,如果啓動的Activity在棧頂,將不會重新創建實例也不調用啓動三方法,同時Activity會調用onNewIntent(),如果Activity不存在於棧頂則啓動方式和standard一模一樣。

singleTask:棧內複用模式,創建這樣的Activity系統會先確認Activity所需的任務棧是否存在如果不存在先創建Activity所需的任務棧,放入Activity。如果存在任務棧,系統會確認在任務棧中是否存在該Activity如果存在將Activity掉到棧頂,並且調用onNewIntent。並且singleTask會清理當前Activity之上的所有Activity。

singInstance:Activity會存在於單獨的任務棧中,由於棧內複用的特性,後續的請求都不會創建新的Activity,除非這個特殊的任務棧被系統銷燬了。

Activity快速恢復:

如果Activity啓動後被系統kill,Activity這時候執行的不是onRestart()是onCreate(),Activity中的臨時數據可能就丟失了,可以調用onSaveInstacneState()用來保存數據,這個方法一定會Activity在被回收前調用,就可以在onCreate()中恢復數據。當某個Activity即將被銷燬的時候會調用onSaveInstanceState()除非是用戶自己主動銷燬比如按下back以下幾種情況onSaveInStanceState()一定會被調用:

1.當用戶按下home鍵

2.當用戶按下home鍵之後啓動其他的Activity

3.鎖屏的時候

4.屏幕橫豎屏切換的時候(如果不指定configchange屬性)

 onSaveInStanceState()被調用的原則就是非用戶主動銷燬Activity時候Activity有被銷燬的危險時,系統會自動調用提供一個機會給你保存數據。

至於onRestoreInStanceState()被調用的前提是Activity確實被銷燬了纔會調用。onSaveInStanceState(),onRestoreInStanceState()不是成對調用的。如果確認Activity被系統銷燬了異常關閉,也就是調用了onSaveInstanceState(),下次啓動調用順序:onCreate()->onStart()->onRestoreInStanceState()->onResume()

注:如果不是跟UI界面有關的參數或者變量,或者從影響你程序的行爲你需要保存如沒必要就不需要自己去寫保存讓它自己實現就好了。可以通過複寫onSaveInStanceState(Bundle outState) 保存數據,在onCreate()中恢復。因爲 Bundle參數可以傳遞到onCreate(Bundle saveInstanceState)中。onSaveInstanceState()方法一定會在onStop()之前調用但不一定在onPause()之後或之後調用。

兩個Activity之間的轉:

A Activity跳轉到B Activity 他們之間經歷的過程A的onPause()->onStop()然後B調用onCreate()->onStart()->onResume()。如果B是一個透明窗體或者是對話框那A不會調用onStop方法。

橫豎屏切換:

與清單文件中的配置有關係

1.如果不設定Activity的android:congfigchange屬性時橫豎屏的切換activity每一次都是重新加載。

2.如果設定了androd:configchange="orientation|keyboardHidden|screenSize"屬性只會執行onconfigurationchanged()。

如何將Activity設置成窗口樣式:

android:theme="@android:style/Theme.Dialog"

如何退出多個Activity的app:

1.記錄Activity退出時遞歸關閉就好。

2.在需要結束的時候發送給特定的廣播,接收廣播後Activity調用onDestory關閉。

3.

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 4997
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章