taskAffinity
每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。
android:taskAffinity="" ,在AndoridManifest.xml文件中作为Activity的属性使用。
先检查包名是否相同,然后检查taskAffinity是否相同,如果都相同,intent的flag设置为flag_activity_new_task的activity与启动它的activity入同一个栈,否则建立新的task然后入栈。
Task
Task就是一个任务栈,里面用来存放Activity,第一个进去的(Activity)处于栈的最下面,而最后创建的(Activity)则处于栈的最上面。从Task中取出(Activity)是从最顶端取出,也就是说先进后出,后进先出。而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建Activity的创建方式。
Activity Intent FLAG
设置方式:
val intent = Intent()
//(1)设置单个flag时采用,setFlags()方法
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
//(2)设置多个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设置为flag_activity_new_task的activity与启动它的activity入同一个栈,否则建立新的task然后入栈。
-
FLAG_ACTIVITY_CLEAR_TASK
会导致含有待启动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时回调到 onUserLeaveHint()。
-
FLAG_ACTIVITY_BROUGHT_TO_FRONT
task中顺序ABC时,由C启动B并设置intent FLAG为此,则顺序变为ACB。
-
FLAG_ACTIVITY_REORDER_TO_FRONT
task中顺序ABC时,由C启动B并设置intent FLAG为此,则顺序变为ACB。
拓展
onUserLeaveHint():
作为Activity的生命周期回调的部分,会在用户决定将Acitivity放到后台时被调用。例如:当用户按下Home键,onUserLeaveHint就会被调用。但是当来电话时,来电界面会自动弹出,onUserLeaveHint就不会被调用。当该方法被调用时,他会恰好在onPause调用之前。