Activity启动模式解析

Activity启动模式

关于Activity的LaunchMode大家一定知道有以下四种:

  • standard(标准模式)
  • singleTop(栈顶复用模式)
  • singleTask(栈内复用模式)
  • singleInsance(单实例模式)

但大家是否理解了这四种启动模式的区别在什么地方还有它们分别的应用场景是什么?

standard

这个模式我们不用显示指定,因为它是Activity默认的启动模式,例如以下代码就是以standard模式启动的:

    Intent intent = new Intent(this, SecondActivty.class);
    startActvitiy(intent);

我们知道Activity是通过任务栈来管理的,使用standard模式会有以下特点:

  • 每启动一个Activity都会重新创建一个实例,然后会被压入栈里面
  • 后创建的Activity会先出栈,一般表现为按back键,就会有一个Activity出栈

一图胜千言:

singleTop

栈顶复用模式,顾名思义:如果在任务栈中的栈顶已经存在该Activity,再次启动Activity则不会重新创建实例,会直接复用栈顶的Activity。

一图胜千言:

还有一点,如果复用栈顶的Activity,则这个Activity的onNewIntent方法会被回调,onCreate方法和onStart方法不会被回调。

singleTask

栈内复用模式 这是个单实例模式,我们启动Activity一般会默认创建一个栈,属性于包名相同,这个是我们的默认栈,通过standard启动的Activity都会放入这个栈内。如果使用singleTask,可以指定Activity需要的栈,可以通过指定taskAffinity属性来指定,但这个属性不能跟包名相同,示例如下:

  <activity android:name=".SecondActivity" android:launchMode="singleTask"
            android:taskAffinity="com.devilwwj.task"

            />

再看一张图你就更清楚了:

singleInstance

单实例模式 这个启动模式跟singleTask有点类似,但它们之间的区别是,singleInstance指定的栈只能存放一个Activity,这个Activity是全局唯一的。

总结

通过上面的对启动的模式的讲解,相信大家已经对Activity的栈管理有了一定的认识,我们在实际开发过程中,就可以通过使用启动模式来满足我们特殊的场景,比如我们通过通知栏启动一个Activity,就可以指定为singleTask来启动。以后面试官问道关于Activity的启动模式,宝宝再也不怕啦。

原文发布于微信公众号 - 小巫技术博客(wwjblog)

原文发表时间:2016-03-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏世界第一语言是java

Android N 7.0、8.0 上自动安装apk问题

如果安装报错,可能是临时文件访问路径没有配置,或者百度上找到的安装代码是旧版本的,7.0以后不在支持,文章最下面有适配的代码。

16520
来自专栏非著名程序员

Android 图片选择到裁剪之步步深坑

前言 最近在自己的项目里实现了一个头像选择的功能,就是先从相册里选取一张图片再调用系统的裁剪功能来制作头像,效果就像下面这样: ? 本以为很小的一个功能,却远远...

41980
来自专栏拭心的安卓进阶之路

Android 进阶2:Activity 的 Task 与启动模式

Android 中的 Task 是什么 我们知道,一个应用中可能有多个 Activity,而这些 Activity 被以栈的形式管理。当我们新打开 Activi...

21650
来自专栏Android干货

Android项目实战(四十九):Andoird 7.0+相机适配

一、在AndroidManifest.xml 文件中添加 四大组件之一的 <provider>

9800
来自专栏非著名程序员

我所理解的Intent 和Intent-filter

1.Intent Intent 是一个消息传递对象,可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包...

21090
来自专栏上善若水

036android初级篇之Activity的启动模式

你可以通过定义运行模式来定义Activities如何与Task进行交互。定义的两种方式如下:

13430
来自专栏刘望舒

Android解析ActivityManagerService(二)ActivityTask和Activity栈管理

前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTask和Activ...

43490
来自专栏上善若水

028android初级篇之调起Activity Service的方法

我们知道调起另外一个组件一般有两种方式,显式的和隐式的。显式的会直接指定要启动的组件,而隐式的则通过匹配条件,调起匹配的组件。

25650
来自专栏码农笔录

Android N 7.0 上安装apk问题

14330
来自专栏向治洪

我所理解的Android 启动模式

首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景。 任务栈是什么 任务栈Tas...

24870

扫码关注云+社区

领取腾讯云代金券