taskAffinity
每個Activity都有taskAffinity屬性蜈亩,這個屬性指出了它希望進入的Task了嚎。
android:taskAffinity="" 壤玫,在AndoridManifest.xml文件中作為Activity的屬性使用精绎。
先檢查包名是否相同祟霍,然后檢查taskAffinity是否相同杏头,如果都相同,intent的flag設(shè)置為flag_activity_new_task的activity與啟動它的activity入同一個棧浅碾,否則建立新的task然后入棧大州。
Task
Task就是一個任務(wù)棧,里面用來存放Activity垂谢,第一個進去的(Activity)處于棧的最下面厦画,而最后創(chuàng)建的(Activity)則處于棧的最上面。從Task中取出(Activity)是從最頂端取出滥朱,也就是說先進后出根暑,后進先出。而Activity在Task中的順序是可以控制的徙邻,在Activity跳轉(zhuǎn)時用到Intent Flag可以設(shè)置新建Activity的創(chuàng)建方式排嫌。
Activity Intent FLAG
設(shè)置方式:
val intent = Intent()
//(1)設(shè)置單個flag時采用,setFlags()方法
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
//(2)設(shè)置多個flag時采用缰犁,addFlags()方法淳地,進行添加
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.setClass(this,Intent1Activity::class.java)
startActivity(intent)
-
FLAG_ACTIVITY_NEW_TASK
先檢查包名是否相同,然后檢查taskAffinity是否相同帅容,如果都相同颇象,intent的flag設(shè)置為flag_activity_new_task的activity與啟動它的activity入同一個棧,否則建立新的task然后入棧并徘。
-
FLAG_ACTIVITY_CLEAR_TASK
會導(dǎo)致含有待啟動Activity的Task在Activity被啟動前清空遣钳。也就是說,這個Activity會成為一個新的root麦乞,并且所有舊的activity都被finish掉蕴茴。這個標志只能與FLAG_ACTIVITY_NEW_TASK 一起使用。
-
FLAG_ACTIVITY_SINGLE_TOP
相當于LaunchMode中的SingleTop模式
-
FLAG_ACTIVITY_CLEAR_TOP
相當于LaunchMode中的SingleTask模式
-
FLAG_ACTIVITY_NO_HISTORY
使用這個FLAG啟動的Activity一但退出姐直,就不會存在于棧中倦淀。(即,不存在歷史記錄)
-
FLAG_ACTIVITY_NO_USER_ACTION
使用這個FLAG啟動的Activity声畏,可以在避免用戶離開當前Activity時回調(diào)到 onUserLeaveHint()撞叽。
-
FLAG_ACTIVITY_BROUGHT_TO_FRONT
task中順序ABC時,由C啟動B并設(shè)置intent FLAG為此,則順序變?yōu)锳CB能扒。
-
FLAG_ACTIVITY_REORDER_TO_FRONT
task中順序ABC時,由C啟動B并設(shè)置intent FLAG為此辫狼,則順序變?yōu)锳CB初斑。
拓展
onUserLeaveHint():
作為Activity的生命周期回調(diào)的部分,會在用戶決定將Acitivity放到后臺時被調(diào)用膨处。例如:當用戶按下Home鍵见秤,onUserLeaveHint就會被調(diào)用。但是當來電話時真椿,來電界面會自動彈出鹃答,onUserLeaveHint就不會被調(diào)用。當該方法被調(diào)用時突硝,他會恰好在onPause調(diào)用之前测摔。