本系列專題以提煉要點的方式總結知識點,而不作具體展開,對應的會附上我的較喜歡的文章連接供你們詳細瞭解和學習。第一個板塊「開發藝術」是對任老師的《Android開發藝術探索》著做的學習和擴展,此書的目錄也是該板塊的主線,那麼就先從咱們熟悉的Activity開始吧~html
一.生命週期全解析android
1.Q:典型狀況下Activity生命週期網絡
A:post
a.onCreate()
:學習
b.onStart()
:動畫
c.onResume()
:3d
d.onPause()
:code
e.onStop()
:cdn
f.onDestroy()
:xml
g.onRestart()
:
onStart()和onResume()、onPause()和onStop()的區別: onStart與onStop是從Activity是否可見這個角度調用的,onResume和onPause是從Activity是否顯示在前臺這個角度來回調的,在實際使用沒其餘明顯區別。
推薦閱讀:對Activity生命週期方法的感性理解
2.Activity生命週期的切換過程
①啓動一個Activity:
②打開一個新Activity:
③返回到舊Activity:
④Activity1上彈出對話框Activity2:
⑤關閉屏幕/按Home鍵:
⑥點亮屏幕/回到前臺:
⑦關閉對話框Activity2:
⑧銷燬Activity1:
參考文章:實際體驗Activity生命週期
3.Q:生命週期的各階段
A:
a.完整生命週期: Activity在onCreate()和onDestroy()之間所經歷的。 在onCreate()中完成各初始化操做,在onDestroy()中釋放資源。
b.可見生命週期: Activity在onStart()和onStop()之間所經歷的。 活動對於用戶是可見的,但仍沒法與用戶進行交互。
c.前臺生命週期: Activity在onResume()和onPause()之間所經歷的。 活動可見,且可交互。
4.onSaveInstanceState和onRestoreInstanceState
a.出現時機:異常 狀況下Activity 重建,非用戶主動去銷燬
b.系統異常終止時,調用onSavaInstanceState來保存狀態。該方法調用在onStop以前,但和onPause沒有時序關係。
onSaveInstanceState與onPause的區別: 前者適用於對臨時性狀態的保存,然後者適用於對數據的持久化保存。
c.Activity被從新建立時,調用onRestoreInstanceState(該方法在onStart以後),並將onSavaInstanceState保存的Bundle對象做爲參數傳到onRestoreInstanceState與onCreate方法。
可經過onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)來判斷Activity是否被重建,並取出數據進行恢復。但須要注意的是,在onCreate取出數據時必定要先判斷savedInstanceState是否爲空。另外,谷歌更推薦使用onRestoreInstanceState進行數據恢復。
推薦閱讀:onSaveInstanceState和onRestoreInstanceState詳解
5.Activity異常狀況下生命週期分析
a.因爲資源相關配置發生改變,致使Activity被殺死和從新建立
例如屏幕發生旋轉:當豎屏切換到橫屏時,會先調用onSaveInstanceState來保存切換時的數據,接着銷燬當前的Activity,而後從新建立一個Activity,再調用onRestoreInstanceState恢復數據。
爲了不因爲配置改變致使Activity重建,可在AndroidManifest.xml中對應的Activity中設置android:configChanges="orientation|keyboardHidden|screenSize"。此時再次旋轉屏幕時,該Activity不會被系統殺死和重建,只會調用onConfigurationChanged。所以,當配置程序須要響應配置改變,指定configChanges屬性,重寫onConfigurationChanged方法便可。
b.因爲系統資源不足,致使優先級低的Activity被回收
①Activity優先級排序:
②當系統內存不足時,會按照Activity優先級從低到高去殺死目標Activity所在的進程。
③若一個進程沒有四大組件在執行,那麼這個進程將很快被系統殺死。
推薦閱讀:異常狀況下的生命週期分析
二.Activity四種啓動模式
1.Q:設置Activity啓動模式的方法
A:
a.在AndroidManifest.xml中給對應的Activity設定屬性android:launchMode="standard|singleInstance|single Task|singleTop"。
b.經過標記位設定,方法是intent.addFlags(Intent.xxx)。
2.Q:Activity的四種LaunchMode
A:
a.standard
:標準模式、默認模式
b.singleTop
:棧頂複用模式
c.singleTask
:棧內複用模式
d.singleInstance
:單實例模式
標識Activity任務棧名稱的屬性:android:taskAffinity,默認爲應用包名。
3.經常使用的可設定Activity啓動模式的標記位
①FLAG_ACTIVITY_SINGLE_TOP:對應singleTop啓動模式。
②FLAG_ACTIVITY_NEW_TASK :對應singleTask模式。
三.IntentFilter匹配規則
原則: ①一個intent只有同時匹配某個Activity的intent-filter中的action、category、data纔算徹底匹配,才能啓動該Activity。 ② 一個Activity能夠有多個 intent-filter,一個 intent只要成功匹配任意一組 intent-filter,就能夠啓動該Activity。
a. action匹配規則:
b. category匹配規則:
c. data匹配規則:
採用隱式方式啓動Activity時,能夠用PackageManager的resolveActivity方法或者Intent的resolveActivity方法判斷是否有Activity匹配該隱式Intent。
推薦閱讀:Intent和IntentFilter
但願這篇文章對你有幫助~