singleTask 模式Activity的啟動(dòng)模式之一据途,是一種棧內(nèi)復(fù)用并activity實(shí)例唯一的一種模式。
他的特點(diǎn)就是棧內(nèi)復(fù)用叙甸,并且會(huì)清除所在棧內(nèi)自身實(shí)例上面的所有activity實(shí)例(LAUNCHER Activity除外)颖医。
今天特此記錄,關(guān)于singleTask 模式下 Activity的跳轉(zhuǎn)傳值和使用注意事項(xiàng)裆蒸。
一是 驗(yàn)證 singleTask 模式 Activity 的啟動(dòng)和復(fù)用熔萧。
有四個(gè)activity
MainActivity LAUNCHER Activity --> 啟動(dòng)模式 singleTask
AActivity --> 啟動(dòng)模式 singleTask
BActivity --> 啟動(dòng)模式 standard
CActivity --> 啟動(dòng)模式 singleTask
執(zhí)行順序是:MainActivity --> AActivity --> BActivity --> CActivity --> MainActivity
下方是執(zhí)行日志:
D/task: onCreate: MainActivity
D/task: onResume: MainActivity
to AActivity
D/task: onCreate: AActivity
D/task: onResume: AActivity
(根據(jù)日志我們發(fā)現(xiàn),singleTask 模式的AActivity啟動(dòng)時(shí)并沒(méi)有銷(xiāo)毀MainActivity 僚祷,因此singleTask 是無(wú)法銷(xiāo)毀LAUNCHER Activity的)
to BActivity
D/task: onCreate: BActivity
D/task: onResume: BActivity
to CActivity
D/task: onCreate: CActivity
D/task: onResume: CActivity
to MainActivity
D/task: onDestroy: AActivity 銷(xiāo)毀
D/task: onDestroy: BActivity 銷(xiāo)毀
D/task: onRestart: MainActivity 重啟
D/task: onResume: MainActivity
D/task: onDestroy: CActivity 銷(xiāo)毀
(MainActivity重啟時(shí)佛致,系統(tǒng)銷(xiāo)毀了AActivity Bctivity CActivity等后續(xù)壓棧的activity實(shí)例)
到此是對(duì)Activity singleTask的啟動(dòng)模式下,站內(nèi)復(fù)用的驗(yàn)證辙谜。由此說(shuō)明俺榆,singleTask模式下,
對(duì)內(nèi)存的合理回收装哆,減少創(chuàng)建次數(shù)和長(zhǎng)期持有activity實(shí)例罐脊,對(duì)我們管理內(nèi)存是很有好處的。
同時(shí)也也節(jié)省了初始化時(shí)間烂琴,用戶(hù)體驗(yàn)也得到了提高爹殊。
二,驗(yàn)證傳值問(wèn)題奸绷。
重新執(zhí)行一下梗夸,執(zhí)行順序是 MainActivity --> AActivity --> MainActivity
下方是執(zhí)行日志,我們分析一下号醉;
D/task: onCreate: MainActivity 創(chuàng)建
D/task: onStart: MainActivity 啟動(dòng)
D/task: onResume: MainActivity 獲取焦點(diǎn)
D/task: onPause: MainActivity 失去焦點(diǎn)
toAActivity
D/task: onCreate: AActivity 創(chuàng)建
D/task: onResume: AActivity 獲取焦點(diǎn)
toMainActivity
D/task: onSaveInstanceState: MainActivity 恢復(fù)數(shù)據(jù)
D/task: onRestart: MainActivity 重啟
D/task: onStart: MainActivity 啟動(dòng)
D/task: onResume: MainActivity 獲取焦點(diǎn)
D/task: onDestroy: AActivity 銷(xiāo)毀AActivity
從日志可以看出反症,Activity在singleTask啟動(dòng)模式下,是走復(fù)用方式的畔派,所以不走onCreate方法铅碍,
而是走onRestart方法,但在此處并不適合進(jìn)行操作线椰,我個(gè)人喜好是這樣的胞谈,
Activity在singleTask啟動(dòng)模式下的數(shù)據(jù)傳遞我是在onResume中處理接受的。
在處理單線邏輯的ui跳轉(zhuǎn)時(shí),例如MainActivity --> AActivity --> BActivity --> CActivity --> MainActivity烦绳,
需求處理完成后卿捎,又返回出發(fā)頁(yè),這種方式的啟動(dòng)模式是非常好的径密。需要注意是傳值問(wèn)題午阵,對(duì)內(nèi)存和用戶(hù)體驗(yàn)都有很好的幫助。
但要特別注意LAUNCHER屬性的Activity在singleTask啟動(dòng)模式下享扔,不要過(guò)多持有對(duì)象底桂,因?yàn)殚L(zhǎng)期持有很容易造成內(nèi)存問(wèn)題。
本文完惧眠,特此記錄activity的singleTask啟動(dòng)模式的特性和注意事項(xiàng)籽懦。