編輯:關於android開發
關於singleTask TaskAffinity allowTaskReparenting
1.standard
2.singleTop:FLAG_ACTIVITY_SINGLE_TOP 棧頂復用模式,即如果棧頂有本activity實例,則無需新實例化activity。
3.singleTask:FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_CLEAR_TOP的效果
4.singleInstance:單獨一個棧,且棧內復用,一旦新建後,只要不銷毀,就不會再新建activity
1.FLAG_ACTIVITY_NEW_TASK : 同singleTask
2.FLAG_ACTIVITY_SINGLE_TOP :同singleTop
3.FLAG_ACTIVITY_CLEAR_TOP 與FLAG_ACTIVITY_NEW_TASK配合使用,
4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS android:excludeFromRecents = "true" 不出現再歷史Activity列表中
standard singletop singleinstance都比較容易理解,就是這個singleTask比較難理解,這裡我們對singleTask做下知識整理
singleTask:FLAG_ACTIVITY_NEW_TASK
功能1:棧內復用原則,已有實例情況下不新建,只調用onNewIntent
功能2:默認有clearTop的效果,將已實例化的activity上面的activity全部出棧。
TaskAffinity:標識Activity所需要的任務棧的名字。默認情況下,Activity所需要的任務棧的名字為應用的包名。可以給每個Activity單獨指定TaskAffinity的屬性。
singleTask要和TaskAffinity配合使用
(1).當前任務棧S1的棧內情況為ABC,Activity D的TaskAffinity屬性為任務棧S2,ActvityD以singleTask模式請求啟動。
結果:系統先創建任務棧S2,新建D的實例入棧S2。最終S1的棧內情況為ABC,S2的棧內情況為D
(2).當前任務棧S1的棧內情況為ABC,Activity D的TaskAffinity屬性為任務棧S1(即不特別指定,默認情況下),ActvityD以singleTask模式請求啟動。
結果:系統直接創建D的實例入棧S1,最終S1的棧內情況為ABCD
(3).當前任務棧S1的棧內情況為ADBC,Activity D的TaskAffinity屬性為任務棧S1(即不特別指定,默認情況下),ActvityD以singleTask模式請求啟動。
結果:系統不創建D,切換D到棧頂並調用其onNewIntent方法,並將D上面的Activity全部出棧,最終S1的棧內情況為AD
allowTaskReparenting:官方定義是“Whether or not the activity can move from the task that started it to the task it has an affinity for when that task is next brought to the front — "true
" if it can move, and "false
" if it must remain with the task where it started.”簡單翻譯就是是否允許該Activity從啟動他的任務(可以理解為activity棧)轉移到與他有親密關系(affinity)的任務中,當有親密關系的任務再次啟動時。
舉例說明:
ActvityA是應用1的主Actvity,ActivityB和ActvityC屬於應用2,B為主Activity。
操作路徑:A啟動C-->點擊Home鍵盤到Launcher->點擊launcher上的應用2
情況1.ActivityC的allowTaskReparenting屬性為false,此時會進入ActvityB 典型案例:將文字文件等,分享到短信
原因:當前任務棧1為AC,此時啟動應用2,會啟動任務棧2,然後將主ActivityB放入任務棧2中
情況2:ActivityC的allowTaskReparenting屬性為true,此時會進入ActvityC 典型案例:將文字文件等,分享到微信
原因:當前任務棧1為AC,此時啟動應用2,會啟動任務棧2,然後系統發現C的taskAffinity屬性任務棧2已經創建,就把C從任務棧1轉移過來,這就是allowTaskReparenting的功能。
參考資料:《Android開發藝術探索》
FFmpeg使用手冊 - ffplay 的常用命令在編譯FFmpeg源代碼時,如果系統中包含了SDL-1.2版本時,會默認將ffplay編譯生成出來,如果不包含SDL-1
Android自動連接指定的wifi,免密碼或指定密碼,androidwifi一、運行時的狀態 遇到一個這樣的要求:“不進行掃描操作,怎麼對指定的免密碼WIF
【Android】自定義FlowLayout,支持多種布局優化--android-flowlayout 前言 flow layout, 流式布局, 這個
Android studio 插件之 GsonFormat (自動生成javabean) 概述 相信大家在做開發的過程中都寫過很多的javabean ,很多情況下 都是一