8.1 Activity3

Activity,Window与View的关系

activity加载view,添加到window上,activity显示出来

(activity-infalte-view——window.addView——activity-setContentView)

8.1 Activity3_第1张图片
流程

启动模式

8.1 Activity3_第2张图片
启动模式

standard模式:标准(默认)启动模式。启动的activity可以被多次实例化,每个实例都会处理一个Intent对象(A-A—>A-A);

singleTop模式:栈顶模式。若启动的activity已经处于栈顶,再次启动这个activity会重用栈顶的并调用onNewIntent(A-A—>A);

singleTask模式:启动的activity在同一Task仅有一个实例,同时intent将被通过onNewIntent发送(A-B-A—>A);

singleInstance模式:启动的activity在多个Task中仅有一个实例,A应用启动activity,B应用也启动该activity将共享A的实例;


Activity管理机制(Task的管理)

Task:任务(frameworker层概念)。task将多个Activity收集起来,进行activity的跳转与返回;

Back Stack:回退堆栈。android中实现Task的数据结构;

栈特点:后进先出(LIFO),常用操作入栈(push),出栈(pop),处于最顶部的叫栈顶,最底部叫栈底;

Activity管理:切换新activity——该activity压入栈,成为栈顶——用户点击返回——栈顶activity出栈,后面activity到栈顶;

注:Task是Activity的集合的概念,Back Stack是实际存储Activity的,Task可以有多个,但同一时刻只有一个栈在最前面,其他的都在后台;

        (Task是可以跨应用的,有时为了无缝连接的用户体验,会将不同应用的activity放在同一个任务中,eg:跳转短信,微信分享等)

管理方法:

1.< activity >xml中我们可以使用的属性如下

 taskAffinity:指出该activity希望进入的task;

1.若 启动activity的Intent设置FLAG_ACTIVITY_NEW_TASK标记,检测是否有相同Affinity的Task栈,有就压入,无就新建;

2.若allowTaskReparenting属性为true,若此时activity所在task1在后台,同时具有相同Affinity的task2进前台,activity入主task2;

    allowTaskReparenting:允许activity更换从属;

    launchMode:启动模式。standard(默认),singleTop,singleTask,singleInstance

    如果用户长时间离开Task(转移到后台),系统会清除task中栈底Activity外的所有Activity,只留最初始的Activity;

    alwaysRetainTaskState:如果栈底activity设置true,就算用户长时间离开Task,task中所有activity也会长时间保存;

     clearTaskOnLaunch:如果栈底activity设置true,一旦用户离开Task(长时间或短时间),task中被清空只剩栈底activity;

     finishOnTaskLaunch:只对单独activity操作,可以结束任何activity(包括栈底),设置true,则会话结束后当前activity不再存在;

2.代码中通过传递特殊标识的Intent

    FLAG_ACTIVITY_NEW_TASK

    FLAG_ACTIVITY_CLEAR_TOP

    FLAG_ACTIVITY_SINGLE_TOP

你可能感兴趣的:(8.1 Activity3)