您的位置:首页 > 移动开发 > Android开发

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存在其他的栈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android activity