Task,

task是用户在执行一个特定功能是与之交互的Activity的集合。

下面说一下task相关属性的用法。

1launchMode

这个属性可以再AndroidManifest中配置有以下选项可供选择

standard默认

系统在启动该Activity的task创建一个新的Activity实例,一个activity能被实例化多次,每个实例可以属于不同的task,一个task也能拥有多个实例

singleTop

如果一个Activity实例已经存在并位于当前task的栈顶,系统转发intent到这个Activity实例并调用她的OnNewIntent方法,而不是重新创建一个新的实例。只有在栈顶的元素才不会被重新创建。

singleTask

系统创建一个新的task并且实例化这个activity作为新task的栈底,但是如果这个activity的实例已经存在来一个分离的task中,系统将转发intent到这个实例并且调用它的onNewIntent方法,而不是创建一个新的实例同时只有一个activity的实例存在。

singleInstance

和singleTask一样,但是系统将不会在持有这个activity的task中启动另外一个activity,一个task中只有一个单独的activity实例,任何在这个task中被启动的activity都属于另外一个task.

通过Intent Flag来制定

FLAG_ACTIVITY_NEW_TASK和singleTask功能一样

FLAG_ACTIVITY_SINGLE_TOP和singleTop功能一样

FLAG_ACTIVITY_CLEAR_TOP如果要启动的activity已经运行在当前task中,所有的位于这个Acitivity之上的Activity将被Destory并且Intent会被发到这个Activity的onNewIntent函数中

taskAffinity

每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该 Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值。

第一种情况

当一个Activity的allowTaskReparenting设置为true,当他进入后台,当一个和它有相同affinity的Task进入前台时,它会重新宿主,进入到该前台的task中。

第二种情况。如果加载某个Activity的intent,Flag被设置成FLAG_ACTIVITY_NEW_TASK时,它会首先检查是否存在与自己taskAffinity相同的Task,如果存在,那么它会直接宿主到该Task中,如果不存在则重新创建Task。
 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值