`
shinfocom
  • 浏览: 1189405 次
文章分类
社区版块
存档分类
最新评论

activity的启动方式(launch mode)

 
阅读更多

在android里,有4种activity的启动模式,分别为:
“standard” (默认)
“singleTop”
“singleTask”
“singleInstance”

它们主要有如下不同:

1. 如何决定所属task
“standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,除非intent包括参数FLAG_ACTIVITY_NEW_TASK。
如果提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到别的task里。
“singleTask”和”singleInstance”总是把activity作为一个task的根元素,他们不会被启动到一个其他task里。

2. 是否允许多个实例
“standard”和”singleTop”可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例;
“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。
singleTop要求如果创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

3. 是否允许其它activity存在于本task内
“singleInstance”独占一个task,其它activity不能存在那个task里;如果它启动了一个新的activity,不管新的activity的launch mode 如何,新的activity都将会到别的task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。
而另外三种模式,则可以和其它activity共存。

4. 是否每次都生成新实例
“standard”对于没一个启动Intent都会生成一个activity的新实例;
“singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。
比如现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。
如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D
如果这时候给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

“singleInstance”是其所在栈的唯一activity,它会每次都被重用。

“singleTask”如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。

当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法
如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。

分享到:
评论

相关推荐

    通过代码设置Activity的Launch Mode

    NULL 博文链接:https://dai-lm.iteye.com/blog/1460541

    Launch-mode-and-Intent-Flags.doc.zip_doc

    Activity的Launch mode和Intent的setFlags

    Activity代理框架AyoActivityNoManifest.zip

    lanuchMode是选择Activity的启动模式,也就是选择模板:ActivityAttacher.LAUNCH_MODE_STANDARDActivityAttacher.LAUNCH_MODE_SINGLE_TASKActivityAttacher.LAUNCH_MODE_SINGLE_TOPActivityAttacher.LAUNCH_MODE_...

    LaunchMode.apk

    一个demo让你彻底了解Activity launch mode

    XFragment:单Activity和多Fragment容器

    并且也支持特地的fragemnt* 支持fragment跳转的launch mode,目前支持standard,singleTop和singleTask,并且模拟了类似activity的onNewIntent()* 支持类似activity的onActivityResult()的回调,fragment采用了监听...

    Android开发艺术探索

    1.2.1 Activity的Launch Mode / 16 1.2.2 Activity的Flags / 27 1.3 Intent Filter的匹配规则 / 28 第2章 IPC机制 / 35 2.1 Android IPC简介 / 35 2.2 Android中的多进程模式 / 36 2.2.1 开启多进程模式...

    android开发艺术探索高清完整版PDF

    Activity的生命周期和启动模式 / 1 1.1 Activity的生命周期全面分析 / 1 1.1.1 典型情况下的生命周期分析 / 2 1.1.2 异常情况下的生命周期分析 / 8 1.2 Activity的启动模式 / 16 1.2.1 Activity的Launch Mode ...

    OneMulti:startFragment看起来就像startActivity。 一个多片段活动

    OneMulti 一活动多片段 例如 一项活动中的相关业务相似的业务共享一个活动 ├─AccountControlActivity │ ├─SignInFragment │ ├─SignUpFragment │ ├─BindMobileFragment │ ├─ForgetPasswordFragment ...

    Introduction.to.Android.Application.Development(4th,2013.12) pdf

    Indicating Activity with Activity Bars and Activity Circles 202 Adjusting Progress with Seek Bars 202 Other Valuable User Interface Controls 203 Displaying Rating Data with RatingBar 204 Showing Time...

    BURNINTEST--硬件检测工具

    data with random seeking" test mode and only occurs with some specific test settings. Release 5.3 build 1024 WIN32 release 10 July 2008 - Workaround for the rare crash bug in Vista in atklumdisp....

    Diskeeper 2008 v12.0.759.0

    Diskeeper records information about its activity in two ways. First, general information about previously-run defragmentation job is shown in the Log tab within the Diskeeper console. Additional ...

    Rave Player网页视频播放器

    - Corrected unloader() prior to launching track, when multiple file kinds are mixed, potentially launch two streams. v2.0.21 (Nov. 9, 2010) - Corrected issue with scrolling display text. v2.0.19a ...

    VB编程资源大全(英文源码 网络)

    So 下载 the code and get involved with the News Group, help us to help you.<END><br>4 , urllink.zip User control to launch web browser and jump to URL.<END><br>5 , vbftp.zip Sample application ...

Global site tag (gtag.js) - Google Analytics