您的位置:首页 > 移动开发 > Android开发

Android:启动模式与任务栈,进程的关系

2017-04-04 19:29 288 查看
前言:

关于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方法设置更为复杂的启动属性,这次就先写到这里,谢谢阅读。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: