Android:启动模式与任务栈,进程的关系
2017-04-04 19:29
288 查看
前言:
关于Android的启动模式,大神们的文章都已经总结的非常好了。这里想自己实际动手写一写代码,更了解这一方面的内容,加深印象。
先准备四个Activity : A,B,C,D分别对应四种启动模式。(MainActivty为根Activity)
在每个Activity的onCreate(),onDestroy(),onNewIntent()中,打印出如下信息
一.standard
1)Main->A
2)Main->A->A
默认的启动方式,每次都会新建一个实例。
二.singleTop
1)Main->B
2)Main->B->B
3)Main->B->B->A->B
这种模式的特点在于,当前栈顶的Activity是否为目标的Activity,如果是,则调用原有的onNewIntent()方法,否则新建一个实例
三.singleTask
1)Main->C
2)Main->C->C
3)Main->C->C->A->B->C
4)Main->A->C->B-C
这种方式保证了目标的Activity在一个Task中是唯一实例,如果上面存在其他Activity则逐一移除(这里有个疑惑,如果Activity是以任务栈的方式管理,在例子3中为什么先移除的是A而不是B?)
四.singleInstance
1)Main->A->D
2)Main->A->D->D
3)Main->A->D->D->A->D
这种方式下,目标Activity将独享一个Task并且整个应用只有一份实例。
五.如果目标Activity(被启动)与源Activity不在同一进程中
这里额外多尝试了一种情况,在类A的Manifest属性中添加android:process=":A"属性
1)Main->A
结果显示,两个Activity在不同的进程当中,但仍同属一个任务栈。
其实除了上述四种,代码中还可以通过Intent的setFlags方法设置更为复杂的启动属性,这次就先写到这里,谢谢阅读。
关于Android的启动模式,大神们的文章都已经总结的非常好了。这里想自己实际动手写一写代码,更了解这一方面的内容,加深印象。
先准备四个Activity : A,B,C,D分别对应四种启动模式。(MainActivty为根Activity)
在每个Activity的onCreate(),onDestroy(),onNewIntent()中,打印出如下信息
Log.e("launch_mode", "方法名 = " + getLocalClassName()); Log.e("launch_mode", "name = " + getLocalClassName() + "," + "process = " + pid + "," + "taskId = " + getTaskId());
一.standard
1)Main->A
2)Main->A->A
默认的启动方式,每次都会新建一个实例。
二.singleTop
1)Main->B
2)Main->B->B
3)Main->B->B->A->B
这种模式的特点在于,当前栈顶的Activity是否为目标的Activity,如果是,则调用原有的onNewIntent()方法,否则新建一个实例
三.singleTask
1)Main->C
2)Main->C->C
3)Main->C->C->A->B->C
4)Main->A->C->B-C
这种方式保证了目标的Activity在一个Task中是唯一实例,如果上面存在其他Activity则逐一移除(这里有个疑惑,如果Activity是以任务栈的方式管理,在例子3中为什么先移除的是A而不是B?)
四.singleInstance
1)Main->A->D
2)Main->A->D->D
3)Main->A->D->D->A->D
这种方式下,目标Activity将独享一个Task并且整个应用只有一份实例。
五.如果目标Activity(被启动)与源Activity不在同一进程中
这里额外多尝试了一种情况,在类A的Manifest属性中添加android:process=":A"属性
1)Main->A
结果显示,两个Activity在不同的进程当中,但仍同属一个任务栈。
其实除了上述四种,代码中还可以通过Intent的setFlags方法设置更为复杂的启动属性,这次就先写到这里,谢谢阅读。
相关文章推荐
- Android应用程序模块详解(任务、启动模式、进程和线程、FLAG_ACTIVITY_NEW_TASK)
- Android应用程序模块详解(任务、启动模式、进程和线程、FLAG_ACTIVITY_NEW_TASK)
- android 任务栈及启动模式
- Android 任务栈、Intent.FlAG_ACTIVITY_xxx、Activity四种启动模式
- Android四大组件——Activity生命周期、启动模式、显隐式意图、杀死进程、杀死所有Activity、安装及反编译
- 完全理解android Activity启动模式LauchMode (深入Activity与任务栈)
- Android任务、进程、线程的关系
- Android 任务栈的启动模式
- Android 启动模式和启动标志的关系以及各种适应的使用场合
- Android教程 -07 Activity的任务栈和启动模式
- android任务栈与启动模式
- (Android review) 任务栈与启动模式
- Activity的启动, android 任务栈及启动模式 ,Intent的用法
- Android启动模式、任务和回退栈的简单应用
- 深入理解Activity启动模式(一)–Activity与进程,线程的关系
- Android 任务和回退堆栈---默认启动模式
- Android多任务切换与Activity启动模式SingleTask之间关系的分析
- Android任务、启动模式、返回栈解析
- android 任务栈及启动模式
- Android的任务栈简介、AndroidMainifest启动模式、Intent Flag启动模式