Activity,Window与View的关系
activity加载view,添加到window上,activity显示出来
(activity-infalte-view——window.addView——activity-setContentView)
启动模式
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