生命周期
-
AActivity 跳轉(zhuǎn)BActivity 執(zhí)行的生命周期
image.png
Android啟動(dòng)模式分為Standard,SingleInstance,SingleTop,SingleTask,四種模式榄檬,基本上每次面試都是必面衔统。
今天打算自己從Activity 生命周期變化,和onNewIntent 舱殿,taskAffinity险掀,是否可以替代singleTask這些角度來重新理解下
SingleTask
依次啟動(dòng)A---B----C三個(gè)界面 樟氢,然后從C 跳回B,其中B界面設(shè)置為SingleTask
Log 日志如下:
04-25 11:15:41.880 4197-4197/wdwd.com.androidpractice E/AActivity: onCreate
04-25 11:15:41.881 4197-4197/wdwd.com.androidpractice E/AActivity: onResume
04-25 11:16:14.394 4197-4197/wdwd.com.androidpractice E/BActivity: onCreate
04-25 11:16:14.395 4197-4197/wdwd.com.androidpractice E/BActivity: onResume
04-25 11:16:34.578 4197-4197/wdwd.com.androidpractice E/CActivity: onCreate
04-25 11:16:34.578 4197-4197/wdwd.com.androidpractice E/CActivity: onResume
04-25 11:16:55.497 4197-4197/wdwd.com.androidpractice E/BActivity: onNewIntent
04-25 11:16:55.497 4197-4197/wdwd.com.androidpractice E/BActivity: onResume
04-25 11:16:55.805 4197-4197/wdwd.com.androidpractice E/CActivity: onDestroy
可以發(fā)現(xiàn)B在第一次啟動(dòng)時(shí)正常埠啃,當(dāng)從C重新啟動(dòng)時(shí),這個(gè)時(shí)候B已經(jīng)存在碴开,C會(huì)被Destroy,然后依次調(diào)用B頁(yè)面的onNewIntent(),onStart(),onResume,這時(shí)博秫,B的onCreate方法沒有調(diào)用挡育,我們可以判斷B沒有重新生成,而B之上的C被干掉了
這個(gè)onNewIntent是干嘛的呢朴爬,測(cè)試從C跳轉(zhuǎn)到B時(shí)傳遞參數(shù)會(huì)怎樣呢,修改了下代碼,A---B 傳入?yún)?shù) 2蒿叠, C----B 時(shí)傳入?yún)?shù)1
04-25 11:32:40.823 5567-5567/wdwd.com.androidpractice E/BActivity: onCreate
04-25 11:32:40.824 5567-5567/wdwd.com.androidpractice E/BActivity: onResume2
04-25 11:33:08.186 5567-5567/wdwd.com.androidpractice E/BActivity: onNewIntent1
04-25 11:33:08.186 5567-5567/wdwd.com.androidpractice E/BActivity: onResume2
04-25 11:33:08.488 5567-5567/wdwd.com.androidpractice E/CActivity: onDestroy
可以發(fā)現(xiàn) onNewIntent 是在界面沒有重新創(chuàng)建時(shí)調(diào)用的蚣常,從A跳過來的Intent依然保存著抵蚊,onNewIntent 從字面意思來理解重新創(chuàng)建了一個(gè)Intent 來接收新的意圖,可以在onNewIntent方法中重新設(shè)置Intent
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
Log.e("BActivity","onNewIntent"+intent.getStringExtra("cyy"));
}
使用場(chǎng)景分析
singleTask 不能用代碼生成溯革,暫時(shí)發(fā)現(xiàn)只能在清單文件中定義,有人說和FLAG_ACTIVITY_NEW_TASK 有相似之處冈闭,還沒有嘗試抖单,使用了singleTask 后萎攒,主要的特點(diǎn)會(huì)將該activity 之上的activity 清空,可以用來消除交互界面的嵌套循環(huán)