jiapeng的专栏

android的一些小心得

Activity的四种启动模式

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()的调用机制

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiapeng2b/article/details/46809731
个人分类: 学习记录
想对作者说点什么? 我来说一句

LaunchMode

2017年06月22日 1.09MB 下载

activity四种启动模式

2016年08月31日 44KB 下载

没有更多推荐了,返回首页

不良信息举报

Activity的四种启动模式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭