activity中与taskAffinity,allowTaskReparenting,启动模式相关的问题
2016-11-30 16:47
309 查看
activityA和activityB在Application1中定义,activityC在Application2中定义
1)activityB的allowTaskReparenting=true。先运行Application2中的activityC,打开activityB,再运行Application1,会显示activityB,当再进入Application2会看不到activityB。
2)activityB的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,先运行Application2中的activityC,打开activityB,再运行Application1,显示activityA,再次打开activityB。
3)activityB的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,activityC的taskAffinity=”com.example.myapplication.activity1”。
4)activityA的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开Application1,再打开Application2,显示activityA界面
结论1:一个activity默认的taskAffinity是包名,同一个栈中若有activity的allowTaskReparenting=true,则它位于本栈的栈顶位置(它在栈间转移,若转移到其他的栈,则本栈中看不到)。
5)activityB,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开activityC,再在activityA以singleTask的方式打开ActivityB,一直back,先是ActivityB退出,再是activityC,最后是activityA。在以singleTask的方式打开activity,先检查是否有taskAffity同名的task存在,有的话则在这个task中创建activity,没有则创建task再创建activity。
结论2:launchMode=singleTask的activity启动时,先查看是否存在实例,若存在则将其上的activity弹出栈并调用onNewIntent,若没有则查看其taskaffinity的task是否存在,若存在,则在其task中创建activity,若不存在,则创建task再创建activity。只有back掉本栈的所有activity之后才能去back掉其他的栈中的activity。
6)ActivityB,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开activityA,再以singleinstance的方式打开ActivityB,以singleinstance的方式打开ActivityC,再次从后台打开Application1,发现是activityA。
结论3:启动模式为singleInstance的activity创建时,先查看此activity有没有创建,若创建则调用onNewIntent,若没有则查看taskAffinity的task是否创建,其task若创建若其中有activity则销毁其activity(有singleInstancede的栈中只能有一个activity,若一个栈有singleInstance的activity,又有其他的activity要创建到本栈,则此singleInstance销毁),创建此activity;若没有创建task则创建task和此activity。launchMode=singleInstance的activity只能存在单独的一个栈,从这个activity加载其他的activity,则其他的activity存在其他的栈。
1)activityB的allowTaskReparenting=true。先运行Application2中的activityC,打开activityB,再运行Application1,会显示activityB,当再进入Application2会看不到activityB。
2)activityB的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,先运行Application2中的activityC,打开activityB,再运行Application1,显示activityA,再次打开activityB。
3)activityB的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,activityC的taskAffinity=”com.example.myapplication.activity1”。
4)activityA的allowTaskReparenting=true,taskAffinity=”com.example.myapplication.activity1”,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开Application1,再打开Application2,显示activityA界面
结论1:一个activity默认的taskAffinity是包名,同一个栈中若有activity的allowTaskReparenting=true,则它位于本栈的栈顶位置(它在栈间转移,若转移到其他的栈,则本栈中看不到)。
5)activityB,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开activityC,再在activityA以singleTask的方式打开ActivityB,一直back,先是ActivityB退出,再是activityC,最后是activityA。在以singleTask的方式打开activity,先检查是否有taskAffity同名的task存在,有的话则在这个task中创建activity,没有则创建task再创建activity。
结论2:launchMode=singleTask的activity启动时,先查看是否存在实例,若存在则将其上的activity弹出栈并调用onNewIntent,若没有则查看其taskaffinity的task是否存在,若存在,则在其task中创建activity,若不存在,则创建task再创建activity。只有back掉本栈的所有activity之后才能去back掉其他的栈中的activity。
6)ActivityB,activityC的taskAffinity=”com.example.myapplication.activity1”,先打开activityA,再以singleinstance的方式打开ActivityB,以singleinstance的方式打开ActivityC,再次从后台打开Application1,发现是activityA。
结论3:启动模式为singleInstance的activity创建时,先查看此activity有没有创建,若创建则调用onNewIntent,若没有则查看taskAffinity的task是否创建,其task若创建若其中有activity则销毁其activity(有singleInstancede的栈中只能有一个activity,若一个栈有singleInstance的activity,又有其他的activity要创建到本栈,则此singleInstance销毁),创建此activity;若没有创建task则创建task和此activity。launchMode=singleInstance的activity只能存在单独的一个栈,从这个activity加载其他的activity,则其他的activity存在其他的栈。
相关文章推荐
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- # Android中Activity四种启动模式和taskAffinity属性详解 #(1)
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity启动模式SingleTask时点击Home键问题
- # Android中Activity四种启动模式和taskAffinity属性详解 #(4)
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解
- Android中Activity四种启动模式和taskAffinity属性详解