关闭

Activity的四种启动模式

标签: 模式结构实例task启动
183人阅读 评论(0) 收藏 举报
分类:

Activity的四种lunchmode模式,lunchmode在activity中扮演着重要的部分,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。

Activity一共有以下四种launchMode:

1.standard
2.singleTop
3.singleTask
4.singleInstance

在manifest.xml文件中,我们可以为Activity指定launchMode
如下:

<activity
android:name=".AMainActivity"
android:label="@string/app_name"
android:launchMode="standard"
>
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />  </intent-filter>
 </activity>

一、standard

这个是系统的默认的启动模式,说的简单点,我们在使用startActivity()方法的时候,系统就会启动一个新的Activity实例,不管它先前启动没有。

点击standard.
这里写图片描述

二、singleTop

如果当前要创建的Activity就在任务栈的顶端,那么不会创建新的Activity,仅仅调用Activity的onNewIntent,如果不在栈顶(或者栈中没有该Activity),那么还是会创建新的Activity。

点击两次B singleTop
这里写图片描述

三、singleTask

如果已经有其他的Task并且包含Activity实例,那就直接调用那个Task的实例。(只有一个Task中会有) 而不是创建一个新的实例。重点:假如你启动一个singleTask的Activity,同时这个Activity在background task中,那么整个background task都会被调入到前台来。下面这幅图就很好的说明这个问题。

点击A singleTask
这里写图片描述

四、SingleInstance

如果前台Activity启动后台任务的Activity,如果后台任务栈中已经有该Activity,那么就会调用该Activity的onNewIntent,并且后台任务还是在后台。如果后台任务栈中没有该Activity,那么会重新创建一个Acitivyt,并单独放入一个任务栈,其实在启动该Acitivity的Intent中也会加入上述标记

这里写图片描述

整体下来就是这样子的,下次讲onNewInent()的调用机制

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28636次
    • 积分:649
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:14篇
    • 译文:1篇
    • 评论:13条
    文章分类
    最新评论