Activity生命周期分析

?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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容