Activity的神奇啓動模式之singleTask

singleTask 模式Activity的啓動模式之一,是一種棧內複用並activity實例唯一的一種模式。
他的特點就是棧內複用,並且會清除所在棧內自身實例上面的所有activity實例(LAUNCHER Activity除外)。
今天特此記錄,關於singleTask 模式下 Activity的跳轉傳值和使用注意事項。

一 驗證 singleTask 模式 Activity 的啓動和複用。

有四個activity
MainActivity LAUNCHER Activity 啓動模式 singleTask
AActivity 啓動模式 singleTask
BActivity 啓動模式 standard
CActivity 啓動模式 singleTask
執行順序是:MainActivity 到 AActivity 到 BActivity 到 CActivity 到 MainActivity
下方是執行日誌:
D/task: onCreate: MainActivity
D/task: onResume: MainActivity

to AActivity

D/task: onCreate: AActivity
D/task: onResume: AActivity
根據日誌我們發現,singleTask 模式的AActivity啓動時並沒有銷燬MainActivity ,因此singleTask 是無法銷燬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 銷燬
D/task: onDestroy: BActivity 銷燬
D/task: onRestart: MainActivity 重啓
D/task: onResume: MainActivity
D/task: onDestroy: CActivity 銷燬
MainActivity重啓時,系統銷燬了AActivity Bctivity CActivity等後續壓棧的activity實例

到此是對Activity singleTask的啓動模式下,站內複用的驗證。由此說明,singleTask模式下,
對內存的合理回收,減少創建次數和長期持有activity實例,對我們管理內存是很有好處的。
同時也也節省了初始化時間,用戶體驗也得到了提高。

二,驗證傳值問題。

重新執行一下,執行順序是 MainActivity 到 AActivity 到 MainActivity
下方是執行日誌,我們分析一下;

D/task: onCreate: MainActivity 創建
D/task: onStart: MainActivity 啓動
D/task: onResume: MainActivity 獲取焦點
D/task: onPause: MainActivity 失去焦點

toAActivity

D/task: onCreate: AActivity 創建
D/task: onResume: AActivity 獲取焦點

toMainActivity

D/task: onSaveInstanceState: MainActivity 恢復數據
D/task: onRestart: MainActivity 重啓
D/task: onStart: MainActivity 啓動
D/task: onResume: MainActivity 獲取焦點
D/task: onDestroy: AActivity 銷燬AActivity

從日誌可以看出,Activity在singleTask啓動模式下,是走複用方式的,所以不走onCreate方法,
而是走onRestart方法,但在此處並不適合進行操作,我個人喜好是這樣的,
Activity在singleTask啓動模式下的數據傳遞我是在onResume中處理接受的.

在處理單線邏輯的ui跳轉時,例如MainActivity 到 AActivity到 BActivity 到 CActivity 到 MainActivity,
需求處理完成後,又返回出發頁,這種方式的啓動模式是非常好的。需要注意是傳值問題,對內存和用戶體驗都有很好的幫助。
但要特別注意LAUNCHER屬性的Activity在singleTask啓動模式下,不要過多持有對象,因爲長期持有很容易造成內存問題。

本文完,特此記錄activity的singleTask啓動模式的特性和注意事項。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章