关于Android Activity 的几种模式
2013-01-19 16:31
441 查看
“A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the "back stack"), in theorder in which each activity is opened.” 这是官网的定义。Task 是一组执行特定工作的Activity集合。执行一系列特定的动作,最后表现的效果就是一个任务,符合“任务”的解释。Task
本质是集合,那么承载这些的特定动作的就是back stack.这些Activity 在栈中按照执行顺序排队,压盏出栈。
Lancher 是大部分任务的起点,当我们点击应用程序图标时,该程序的Task 就会被调至前台开始运行。当应用程序是第一次打开,那么就新建一个任务,将当前Application 的Main入口Activity 作为root Activity 压栈。如果该Activity 启动了其他的Activity ,则new Activity 就会被压栈,此时它在栈顶位置,并且获取焦点。原来的Activity 在栈底,进入停止状态,此时的停止并不是Activity的生命周期的onStop。当按下Back 键,当前栈定的Activity
出栈操作,被销毁,之前停止的Activity 处在栈顶,重新获取焦点。继续按back ,程序就会一直退出,直到stack 空,任务被销毁,返回到Lanucher.
这就是最普通的单个Task 管理Activity 的方式。但是我们在真正的开发中,由于良好交互的需要,多个页面之间的跳转并不是都严格按照这个规则执行,也达不到节省系统资源的目的。所以,Task 中Activity 的管理,给出了几种特殊的模式,虽然Activity 在栈中的顺序不能改变,但我们可以通过其他辅助手段,来改变这个规则。
1.
系统在Task 中创建由它当前启动的Activity 的一个实例,并保存启动它的Intent.该Activity 可以被实例化多次,每个实例可以属于不同的Task,同一个Task 中也可以存在多个实例。也就是,实例之间是独立的,每次启动他都是产生一个新的实例。
2.
按照字面意思来理解,即在栈顶前2位置的Activity 实例不能相同。eg:A-B-C-D ,此时如果intent 要启动D,那么会通过
模式出现A-B-C-D-D,而还是A-B-C-D。注意:当一个新Activity 实例被创建,user 可通过back 返回前一个Activity.但是,如果是当前已经存在的Activity 实例handle a new intent.比如A-B-C-D,D-D情况下,在D 中,当a new intent 到
是不能返回的。
3.
Activity 实例在一个单独的Task 中,当再次启动该Activity时,如果已经有一个实例,还是通过
启动的Activity 实例都存在与同一个Task 中。
4.
通俗的讲,当要启动一个已经存在与Stack 中的Activity 实例,如果该实例不在栈顶,则将在它之前的实例全部都Destory 掉,之后该实例顺利登顶,运行。
通常和
本质是集合,那么承载这些的特定动作的就是back stack.这些Activity 在栈中按照执行顺序排队,压盏出栈。
Lancher 是大部分任务的起点,当我们点击应用程序图标时,该程序的Task 就会被调至前台开始运行。当应用程序是第一次打开,那么就新建一个任务,将当前Application 的Main入口Activity 作为root Activity 压栈。如果该Activity 启动了其他的Activity ,则new Activity 就会被压栈,此时它在栈顶位置,并且获取焦点。原来的Activity 在栈底,进入停止状态,此时的停止并不是Activity的生命周期的onStop。当按下Back 键,当前栈定的Activity
出栈操作,被销毁,之前停止的Activity 处在栈顶,重新获取焦点。继续按back ,程序就会一直退出,直到stack 空,任务被销毁,返回到Lanucher.
这就是最普通的单个Task 管理Activity 的方式。但是我们在真正的开发中,由于良好交互的需要,多个页面之间的跳转并不是都严格按照这个规则执行,也达不到节省系统资源的目的。所以,Task 中Activity 的管理,给出了几种特殊的模式,虽然Activity 在栈中的顺序不能改变,但我们可以通过其他辅助手段,来改变这个规则。
1.
"standard"(the default mode)
系统在Task 中创建由它当前启动的Activity 的一个实例,并保存启动它的Intent.该Activity 可以被实例化多次,每个实例可以属于不同的Task,同一个Task 中也可以存在多个实例。也就是,实例之间是独立的,每次启动他都是产生一个新的实例。
2.
"singleTop"
按照字面意思来理解,即在栈顶前2位置的Activity 实例不能相同。eg:A-B-C-D ,此时如果intent 要启动D,那么会通过
onNewIntent(),到达之前当前的栈顶D,不会如
standard
模式出现A-B-C-D-D,而还是A-B-C-D。注意:当一个新Activity 实例被创建,user 可通过back 返回前一个Activity.但是,如果是当前已经存在的Activity 实例handle a new intent.比如A-B-C-D,D-D情况下,在D 中,当a new intent 到
onNewIntent()达
前,back
是不能返回的。
3.
"singleTask"
Activity 实例在一个单独的Task 中,当再次启动该Activity时,如果已经有一个实例,还是通过
onNewIntent()定位到已经存在的实例,不重新创建。当前时间,Task中仅存在一个实例。由该Activity
启动的Activity 实例都存在与同一个Task 中。
4.
"singleInstance"
与singleTask不同之处,当启动其他Activity时,会为后者单独创建一个Task.
同样也可以在Intent中设置Flag 达到上述部分模式相同的效果。
FLAG_ACTIVITY_NEW_TASK同
"singleTask"
FLAG_ACTIVITY_SINGLE_TOP同
"singleTop"
FLAG_ACTIVITY_CLEAR_TOP是比较特殊的,上面没有相关模式与之对应。
FLAG_ACTIVITY_CLEAR_TOP
通俗的讲,当要启动一个已经存在与Stack 中的Activity 实例,如果该实例不在栈顶,则将在它之前的实例全部都Destory 掉,之后该实例顺利登顶,运行。
通常和
FLAG_ACTIVITY_NEW_TASK一起用,用来定位一个已经在其他Task 中存在的Activity.或者将其放在指定位置,在特殊的时候,能够响应Intent.
相关文章推荐
- Android中关于startActivityForResult()在activity不同启动模式下onActivityResult()的回调
- Android开发之--activity的几种启动模式
- 关于android中activity的四种启动模式
- 关于Android开发中Activity的启动模式
- Android 关于Activity的四种启动模式的简单介绍
- Android四大组件之Activity(几种FLAG加载模式)
- android 关于activity四种启动模式u及一些常用的flags的 笔记
- 关于android activity启动模式
- Android -singleInstance 关于activity 的存在模式
- activity在android中的几种加载模式
- 关于Android之activity的四种启动模式分析
- Android 中 Activity 启动模式
- Android Activity的4种启动模式
- Android Activity四种启动模式
- 关于Android MVP模式的思考
- [android] Activity的四种加载模式
- Activity的几种启动模式介绍
- Android利用activity启动模式退出整个应用
- Android初学习 - Activity启动模式(lauchMode)总结
- Android 创建单例模式的几种方法