Task and Back Stack难点及疑点记录

来源:互联网 发布:软件自学网cad2016 编辑:程序博客网 时间:2024/06/01 07:33

 1.SingleTask:系统在该类型的Task不存在时创建一个新的Task,并将该Activity放入Task底部。如果新的Intent到达时,该Activity上面有其他的对象则将这些对象从Task中弹出。  逻辑执行如下:  如果该activity的Task已存在(TaskAffinity标记),则直接将该Task拉回前 台,并清除该activity上面的所有对象,使该activity可以处理新的Intent。如果该Task不存在,则新建Task并将该activity作为RootActivity。  综上所述:singleTask的作用相当于FLAG_ACTIVITY_CLEAR_TOP+FLAG_ACTIVITY_NEW_TASK       2.SingleInstance:系统总是会创建一个新的Task来放置启动的Activity,并且新创建的Task中只会有这一个Activity;       如果在此Activity中又跳转到其他的Activity中则相当于在Intent中加入了FLAG_ACTIVITY_NEW_TASK标记;     3.AllowTaskReparenting:允许重定义父级,即当activityA被一个外部应用启动时,activityA会被放入启动它的TaskA中。如果该activityA的TaskAffinity(即同一应用)标记的TaskB在之后也被启动时,activityA会被放入TaskB的顶部,并从TaskA中弹出。进一步如果TaskA为第一次启动那么TaskA的中除了activityA之外还有一个RootActivity。

4.FLAG_ACTIVITY_CLEAR_TOP:  Standard模式:系统收到新的Intent时,如果Task中存在该Activity则弹出Activity和Activity上面的所有对象,并重新初始化一个新的Activity对象放入栈顶,以处理Intent请求。因为Standard总是初始化新的Activity来处理Intent请求。  

其他模式:则会将Activity上面的对象弹出,使该Activity在栈顶部,以处理Intent请求。    

5.FLAG_ACTIVITY_NEW_TASK: 如果该Activity的Task已经存在,则不创建新的task,而是将待启动的Activity放入已经存在的Task中,如果Task不存在则创建新的Task,并将待启动的Activity放入新创建的Task中;其中task的标识由配置文件中的TaskAffinity属性指定;    

6.系统一段时间后会清除后台Task中的Activity,除了RootActivity。这是系统的默认行为。下面几个值会改变系统的默认行为:  

AlwaysRetainTaskState:总是保存Task中Activity的状态,对RootActivity设置才有效果。  

ClearTaskOnLunch:离开回来总是清除除了RootActivity之外的对象,对RootActivity设置才有效果。  

FinshOnTaskLunch:可以设置所有的Activity,只对设置的Activity有效,离开回来总是清除除了设置该属性的对象

0 0
原创粉丝点击