天天看点

Android中Activity和task,活动亲和力,启动模式,活动状态以及生命周期,激活钝化

activity和task:

android通过保持所有activity在同一个task中来维护用户的经历-典型是在launcher选择的

应用,栈顶活动是交互活动,back后,pop栈,即使涉及多个实例活动,不会重新管理,只有pop和push

 task:

 task是活动的栈,task的值是作为整体设置给root activity的.

 activity:

 一个task中的所有的activity作为整体进行移动.

 activity和task的关系,以及同一task内activity的行为可通过intent对象的flag标记和清单文件的activity元素

 进行控制.请求和相应都有一个说法.

 intent flag如下:

 flag_activity_new_task

 flag_activity_clear_top

 flag_activity_reset_task_if_needed

 flag_activity_single_top

 <activity>属性有

 taskaffinity

 launchmode

 allowtaskreparenting

 alwaysretaintaskstate

 finishontasklaunch

 affinity和task:亲和力和task

 默认时,应用程序所有activity彼此具有一个affinity-属于同一任务.但可设置单独的activity的affinity(通过

 <activity>属性),不同应用程序中的activity也可以定义相同的affinity,或者同一应用,不同affinity.

 affinity生效需要两个条件:intent对象包含flag_activity_new_task标记和allowtaskreparenting=true

  flag_activity_new_task:

  如果含该标记,系统查找不同的任务来容纳新的activity,通常是新建task.但不一定这样,如果已经存在具有同一

  affinity的task,新的activity会在那个task中启动,若没有,开始新的任务.

  allowtaskreparenting

  若设置该属性为true,该activity可以彼task回到前台时有开始时的task移动到那个task上.

launch mode:

 standard:每次访问实例化新的对象.

 singletop:如果目标activity在栈顶,直接返回.否则实例化.

 singletask:是单例,通常设置给root activity.由此开启的activity具有相同的taskid

 singleinstance:是单例,通常设置给root activity.由此开启的activity具有不同的taskid

 task:是activity的栈,

activity状态:

 激活态:栈顶,正在交互

 暂停态:可见,被不完全覆盖

 停止态:不可见,完全覆盖.

activity生命周期循环:

 完整周期:oncreate() ---> ondestroy()[停止态]

 可视周期:onstart() --> onstop();[暂停态]

 前台周期:onresume()--->onpause();[激活态]

 oncreate() --- onstart()   --- onresume()  --- onpause()  -- onstop  -- ondestory()

                        |                 |          |    |

      |      |-----<----    |

      |------------<---- onrestart() -------------|

active:激活

deactive:钝化

继续阅读