?onCreate():表示Activity正在創(chuàng)建,可以做初始化操作,setContentView(),初始化Activity所需要的數(shù)據(jù);
onRestart():表示重啟啟動(或者回到前臺進程),當Activity從不可見狀態(tài)有重新變成可見狀態(tài)時,例如用戶按下Home鍵or啟動新Activity后回到這個Activity,onRestart()就會被調(diào)用;(onPause() - onStop() - onRestart() - onStart() - onResume()) ; ? ?
onStart():Activity正在被啟動,此時Activity已經(jīng)可見但未出現(xiàn)在前臺,但是無法與用戶交互; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?onResume():Activity此時已經(jīng)可見并開始活動,可與用戶進行交互; ? ? ? ? ? ? ? ?
?onPause():表示Activity正在退出,正常情況下onStop()會馬上調(diào)用,特殊情況下,新Activity主題為透明主題時,不會立即調(diào)用onStop(),但是在onPause()避免處理比較耗時的操作,會影響到新Activity顯示,只有在onPause()結(jié)束后新Activity的onResume()才會被執(zhí)行; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?onStop()表示Activity即將停止,可以處理稍微重量級的耗時操作; ? ? ? ? ? ? ? ?
onDestory():此時Activity正在被銷毀,也是生命周期最后一個執(zhí)行的方法,一般我們可以在此方法中做一些回收工作和最終的資源釋放。
異常情況下的生命周期分析
1、資源相關(guān)的系統(tǒng)配置發(fā)生改變導(dǎo)致Activity被殺死并重新創(chuàng)建,比如設(shè)備在橫豎屏切換,此時Activity的onPause() - onStop() - onDestory()均會被調(diào)用,同時還會執(zhí)行onSaveInstanceState(),來保存當前Activity的相關(guān)狀態(tài);當系統(tǒng)重新啟動這個Activity時就會調(diào)用onRestoreInstanceState()。PS:View中也有這兩個方法,其分發(fā)機制與View時間分發(fā)機制類似
2、資源內(nèi)存不足時導(dǎo)致低優(yōu)先級的Activity進程被殺死 ,我們可通過在AndroidMenifest.xml中配置Activity的android:configchange屬性來決定是否在資源配置發(fā)生改變時調(diào)用onSaveInstanceState()、onRestoreInstanceState()方法,而是調(diào)用ActivityonConfigurationChanged()方法。
Activity的啟動模式
Android有四種啟動模式:standard、singleInstance、singTask、singleTop????????????????
standard:標準模式,最常見的一種。注意的是:通過ApplicationContext啟動Activity時需要注意的添加FlAG_ACTIVITY_NEW_TASK,此時待啟動的Activity就是以singleTask模式啟動;????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
singleTop: 棧頂復(fù)用模式,如果此時Activity位于棧頂,同時為SingleTop模式,那么Activity將不會被創(chuàng)建,但是onNewIntent()方法將會被調(diào)用?????????????????????????????????????????????????????
singleTask: 棧內(nèi)復(fù)用模式,單例模式啟動方式。與singleTop()啟動方式類似,也會調(diào)用onNewIntent()方法。關(guān)于Activity退出應(yīng)用時運用?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
singleInstance: 單實例模式,加強型的singleTask,當設(shè)置為singleInstance模式的Activity只能單獨存在一個新的任務(wù)棧中,后續(xù)君不悔創(chuàng)建新的Activity,除非系統(tǒng)將此任務(wù)?;厥?/p>
另外:通過adb shell dumpsys activity來查看當前任務(wù)棧的相關(guān)信息
IntentFilter的匹配規(guī)則
一個Activity可以有多個<intent-filter>,一個Intent只要能夠匹配其中的一組<intent-filter>就可以成功啟動Activity。主要action、category、data信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
action匹配規(guī)則:只要Intent能夠匹配<intent-filter>中的任何一個action即可,區(qū)分字母大小寫,并且action必須存在;??????????????????????????????????????????????????????????????????????????????????????????
category匹配規(guī)則:<intent-filter>中存在幾個category,那么intent設(shè)置的每一個category都必須匹配<intent-filter>中的category;????????????????????????????????????????????????????????????????????????????????
data匹配規(guī)則:與action匹配規(guī)則類似,通過隱式調(diào)用Activity時,可以提前通過PackageManager的resloveActivity(Intent intent, int flag)返回匹配成功的Activity,提供程序的健壯性;也可通過PackageManager的queryIntentActivitis(Intent intent, int flag)返回所有符合<intent-filter>的Activity