Android开发艺术探索 读书笔记4

Activity的TaskAffinity属性 任务栈分为前台任务栈和后台任务栈(后台任务栈处于暂停状态,用户可以切换前后台任务栈)

这个参数标志了Activity所需的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。

TaskAffinity属性主要与singleTask启动模式和allowTaskReparenting属性配对使用 。

1.当TaskAffinity和singleTask使用时候,是将具有该模式的Activity的目前任务栈的名字,启动后运行在名字对应相同名字的任务栈中。

2.当TaskAffinity和allTaskReparenting结合时候,例如:当应用A启动了应用B的Activity,如果该Activity的allTaskReparenting属性为true的话,A应用启动了B的Activity,这个Activity会先在A的任务栈中,但是,当启动B的时候,发现Activity的任务栈已经被启动了,就会从A的任务栈中将Activity转移过来。书中这么说:这可以这么理解,由于A启动了Activity,所以Activity只能运行在A中,但是Activity属于B,正常情况下,他的TaskAffinity肯定跟A的任务栈不同,因为包名都不同,而当B被启动后,B会创建任务栈,这个时候系统发现Activity原本所想要的任务栈以及被创建了,所以把它从A的任务栈中转移过来了。


如何给Activity指定启动模式呢?

1.第一种通过AndroidMenifest为Activity指定启动模式

2.通过Intent中设置标志位为Activity指定启动模式

注意:第二种设置方式肯定比第一种优先级更高;第一种无法为Activity设置FLAG_ACTIVITY_CLEAR_TOP标志;第二种无法为Activity指定singleInsance模式


Activity的Flags

主要说一些常见的标记位

FLAG_ACTIVITY_NEW_TASK : 主要作用是为Activity指定“singleTask”启动模式,与在清单文件中指定该启动模式相同

FLAG_ACTIVITY_SINGLE_TOP: 同上 指定“singleTop”启动模式

FLAG_ACTIVITY_CLEAR_TOP : 具有此标记Activity,当它启动的时候,同一个任务栈的位于它上面的Activity都会出栈,这个标记一般会和singleTask启动模式一起出现,在这种情况下,如果被启动的Activity实例已经存在,系统会调用它的onNewIntent。当和standard启动模式的时候,被启动Activity和它上面的Activity都会出栈,系统会创建新的Activity实例放入栈顶。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有这个标志的Activity不会出现在历史Activity的列表中,用户不能通过历史列表返回到我们的Activity中,等同于在XML中指定Activity的属性android:ecludeFormRecents = "true"


今天就到这。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值