launcherMode

Activity如何被启动呢?Intent对象中与Activity启动相关的标志(FLAG_ACTIVITY_*)有四个。它们分别是:

"standard"     "singleTop"     "singleTask"     "singleInstance"

默认的启动模式是“standard”

四个模式主要分成两组:第一组是 "standard" 和"singleTop" ,"singleTask" 和"singleInstance"是另外一组。Activity以 "standard" 和"singleTop" 这两种模式启动时,可以被实例化多次。其实例可以属于任何Task中,并且可以位于Task的任意位置。通常情况下,它们通过调用startActivity()启动加入到Task中,除非Intent对象中包含了“FLAG_ACTIVITY_NEW_TASK ”的flag,在这种情况下它将进入到不同的Task中。

相比之下, "singleTask" 和"singleInstance"模式启动的Activity只能开始另一个Task,并且它们总是属于这个Task的Root Activity。此外,设备在一段时间内只维持一个该Activity的实例。只有一个这样的Task。

"standard" 和"singleTop"之间只有一个地方不同:对于"standard"模式的Activity,每次有一个Intent启动时,都会生成新的Activity实例,而对于"singleTop"模式启动的Activity来说,如果Activity实例在目标Task的顶部,该Activity被Intent启动时不会产生新的实例(会调用oneNewIntent()),其它情况下,如果Activity在目标Task中但是不在目标Task的顶部 或是 Activity在一个Task的顶部,但是不在目标Task中。它仍会创建一个新实例,进入到目标Task的顶部。

"singleTask" 和"singleInstance"之间也是只有一个地方不同:以 "singleTask"模式开始的Activity,允许其它的Activity加入到它所到的Task,它始终是这个Task的Root Activity,其它能进入到这个Task的Activity的启动模式一定是 "singleTask" 和"singleInstance"这两种模式。"singleInstance"启动的Activity也会开始一个Task,但是它不允话其它的Activity进入到它所在的Task,它是此Task的唯一的Activity同样也是Root Activity。

1.standard

默认启动方式。系统总是在目标Task中创建一个新的Activity实例。

2.singleTop

如果在目标Task的顶部已存在Activity实例,系统将通过该实例调用onNewIntent()方法,而不创建新的Activity实例。

3.singleTask

系统创建新的Activity实例,开启新的Task,并将Activity的实例做为新Task的根Activity。但是如果Activity的实例已经存在,系统会通过该实例调用onNewIntent()方法,而不是创建一个新的实例。

4.singleInstance

同“singleTask”一样,但是系统不会将其它Activity的实例放入到拥有该Activity实例的Task,该Activity实例将独占一个Task

Activity Launch Mode的更多相关文章

  1. Android模拟器出现emulator-5554 disconnected! Cancelling activity launch !的解决办法

    关于 emulator-5554 disconnected! Cancelling 'xxx activity launch'!的问题,解决方法: d: cd D:/Program Files/and ...

  2. Android Activity学习笔记(一)

    Activity为Android应用的四大组件之一,提供界面来与用户完成交互等操作.其中Activity的生命周期的知识这里做个笔记. Activity的生命周期由以下几个部分组成: 1.onCrea ...

  3. android程序报错“error launching activity com.android.ddmlib.shellcommandunresponsiveexception”的解决方式

    今天在调试android程序的时候,因为是NDK开发,要先编译.so库再打包下载到android模拟器,所以花费的时间比較长.控制台就会报例如以下错误: error launching activit ...

  4. 通过命令启动一个activity(am pm 命令)

    一.am的含义是activityManager 主要作用是启动activity.service .broadcast    1.通过adb命令启动acitvity,首先需要设置activity 的 e ...

  5. Android Activity启动耗时统计方案

    作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...

  6. Android之Activity启动流程详解(基于api28)

    前言 Activity作为Android四大组件之一,他的启动绝对没有那么简单.这里涉及到了系统服务进程,启动过程细节很多,这里我只展示主体流程.activity的启动流程随着版本的更替,代码细节一直 ...

  7. ATMS中去拉起新的进程,并在新进程启动后调用attachApplication时,resume待启动的Activity

    相关文章: ATMS中去pause Activity A. 目录 ATMS拉起新进程 堆栈 resumeTopActivityInnerLocked:1684, ActivityStack start ...

  8. Android Log Tag含义

    在分析Android问题的时候重要的手段之一就是分析log,在events.log中有很多系统log,其中有些log的含义并不是很了解,下面就是从安卓源码中得到的系统log的tag. 关于Tag的说明 ...

  9. ADB am 命令详细参数

    usage: am [subcommand] [options] usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <F ...

随机推荐

  1. Windows xp下IDT Hook和GDT的学习

    一.前言   对于IDT第一次的认知是int 2e ,在系统调用的时候原来R3进入R0的方式就是通过int 2e自陷进入内核,然后进入KiSystemService函数,在根据系统服务调用号调用系统服 ...

  2. 简谈java的split

    最近都在处理视频音频,今天在合成音频视频时为了给合成的新文件换个新名字,我打算获取了之前的视频名称,用split来分割出不带后缀的名字,再自己加上后缀. 众所周知split可以分割由某种字符分段的St ...

  3. c3p0详细配置

    c3p0详细配置 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> <default-conf ...

  4. hihocoder #1224 : 赛车 dfs

    #1224 : 赛车 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1224 ...

  5. TListView列表拒绝添加重复信息

      //TListView列表拒绝添加重复信息 procedure TForm1.Button1Click(Sender: TObject);var  i: Integer;begin  if (Tr ...

  6. myeclipse-10.7-offline-installer-windows安装图解及注意事项

    MyEclipse企业级工作平台(MyEclipseEnterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们能够在数据库和JavaEE的开发.公布 ...

  7. PhoneTutorial

    https://github.com/navasmdc/PhoneTutorial PhoneTutorial-master.zip

  8. android138 360 小火箭

    package com.itheima52.rocket; import android.app.Service; import android.content.Context; import and ...

  9. SVN 冲突文件快速解决方法

    精简的美丽...... 现在几乎没有几个写代码的人不用snv来存储代码了吧! 但是,在实际操作中,多人对同一文件读写造成冲突是时有发生的事.这个时候解决的方法就是打开文件找出冲突的地方.如果冲突的部分 ...

  10. VirtualBox命令更改虚拟硬盘空间

    主要是使用VBoxManage命令来操作 第一步:打开CMD,进入到virtualbox存放虚拟机的目录中(win7 系统可以直接在文件夹空白处按住shift键右键鼠标选择[在此处打开命令窗口]),输 ...