activity中与taskAffinity,allowTaskReparenting,启动模式相关的问题

来源:互联网 发布:cctv视频下载软件 编辑:程序博客网 时间:2024/04/30 09:52

activityAactivityBApplication1中定义,activityCApplication2中定义

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)activityBallowTaskReparenting=true,taskAffinity=com.example.myapplication.activity1,activityCtaskAffinity=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,activityCtaskAffinity=com.example.myapplication.activity1,先打开activityC,再在activityAsingleTask的方式打开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和此activitylaunchMode=singleInstance的activity只能存在单独的一个栈,从这个activity加载其他的activity,则其他的activity存在其他的栈。

1 0
原创粉丝点击