Activity 加载模式详细说明

 

在minifest.xml中的<activity>元素的launchmode属性可以设置四种不同的加载模式:

“standard”(默认值)

“singleTop”

“singleTask”

“singleInstance”

 

以下表格是纯考虑launchmode设置情况下作出比较

哪个Task把持对intent作出响应的activityActivity是否可以存在多个实例在实例所在的Task是否会有别的Activity是否载入新的类实例来处理新的intent
standard
产生intent的任务
可以被多次初始胡,每个实例可以归属于不同的Task其它Activity可以出现在它所在Task的任意位置对每个新的intent都会创建新的实例
singleTop产生intent的任务
可以被多次初始胡,每个实例可以归属于不同的Task其它Activity可以出现在它所在Task的任意位置如果Activity处于当前Task堆栈的最顶端,则重用Activity,不需要创建新的实例。否则需要重新创建实例
singleTask定义的新的task
只有一个实例是Task的根Activity,可以将其它Activity载入到它所在Task中,并在它的上方不创建新实例。
如果Activity不在堆栈最顶端,则忽略该Intent并且同时Task被激活,切换至前台。如果在最顶端,那么处理Intent。
singleInstance定义的新的task
只有一个实例不存在不创建新实例。因为它始终在Task的栈顶,因此始终能处理Intent

 

对于launchmode对于Activity生命周期的影响还需要考虑 Intent中的Flag值。

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP

如果是FLAG_ACTIVITY_NEW_TASK的标记,对于standard或者singleTop启动模式的activity也会重新新建一个Task。

 

 

 

 

在实际开发中,我们有一个需求,保证某个activity只有一个实例。这里会碰到一个case:

1.start Activity from gallery

2.start other apps until  step1 activity be destroyed by system.

3.start Activity from other app.can start but can't stop the old activity.

4.click gallery. start the old activity by system.

 

这个case里面会产生两个实例。

暂时无解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值