activity启动模式你真的了解吗?

activity四种启动模式:

首先明确一点activity一定是依附于某个任务栈才能存在的 默认情况下一个应用内的activity都在一个任务栈里 可以通过Android:taskAffinity来修改它的任务栈

1:standard  每次启动都重新实例化一个实例

2:singletop 栈顶复用模式,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。

3:singletask 栈内复用模式 如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity。

如果在清单文件中配置Android:taskAffinity="新的包名",因为Android:taskAffinity这个字段默认指定的包名为本应用的包名,表示在本应用包名的任务栈内创建应用。如果设置了这个字段,而且还和本应用包名不同,就会在新的任务栈创建任务。

4:singleinstance 全局唯一实例 单独存在一个栈内。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。

以上只是一些基础概念,如果以为知道这些就了解了activity的启动模式,那么只能说too young too simple。

以下列举在开发中实际出现的一些问题:

1:activityA 通过startactivityforResult ->启动activityB(singletash|singleinstance)。

     activityA并不会收到结果返回值

2:关于singletask在mainactivity与非mainacitvity时候

两种情况
1:main Activity ->启动a(singletask)->启动b 然后按HOME(不是back)回到桌面 

然后再次点开应用显示acitvityb
2:main(singletask)  ->启动b 按HOME(不是back)回到桌面  再次点开应用显示main

打印log发现当按下HOME后 b:onpause->onstop 

再次点开应用 b:执行ondestroy 

             main:执行onNewIntent->onrestart ->onstart->onreusme


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值