众所周知,Android中Activity有四种启动方式,他们分别是:standard,singleTop,singleTask,singleInstance,下面对进行一一详解。

Standard-默认模式

标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A–>A。

SingleTop-栈顶复用模式

如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。

了解更多Task知识

举例来说,如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中,那么再调用startActivity(new Intent(this,A.class))启动A时,不会再次创建A的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()方法。这是任务桟中还是这有一个A的实例。

如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。

singleTop模式分3种情况

当前栈中已有该Activity的实例并且该实例位于栈顶时,不会新建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewIntent方法

当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例

当前栈中不存在该Activity的实例时,其行为同standard启动模式

standard和singleTop启动模式都是在原任务栈中新建Activity实例,不会启动新的Task,即使你指定了taskAffinity属性。了解更多taskAffinity

SingleTask-栈内复用模式

这个模式十分复杂,有各式各样的组合。在这个模式下,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。

SingleInstance-全局唯一模式

该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。

android activity singletask,Android必读之SingleTop、SingleTask等Activity启动方式的区别相关推荐

  1. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  2. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  3. Android中Service的启动方式及Activity与Service的通信方式

    Service启动的两种方式 1.通过startService启动 使用Service的步骤: 定义一个类继承Service 在Manifest.xml文件中配置该Service 使用Context的 ...

  4. Android关于Task的一些实践之SingleTask, SingleInstance和TaskAffinity

    上一篇文章粗略地介绍了一下关于Android中Task的基本知识.只是实践才是检验真理的唯一标准,所以.今天就来试验一下Task中的launchMode是否真的实现了文档所说的那样. 首先.定义三个A ...

  5. activity 的属性android:taskAffinity和android:allowTaskReparenting

    1.清单文件中,activity 的属性 android:allowTaskReparenting 这个属性用于设定Activity能够从启动它的任务中转移到另一个与启动它的任务有亲缘关系的任务中,转 ...

  6. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

  7. # android开发:4-1、Activity启动方式、生命周期、不同activity的数据传递

    4.Activity活动简介 什么是Activity: 如何创建Activity: Activity启动方式: Activity的生命周期: 不同Activity之间数据的传递: 什么是Activit ...

  8. android setflag找不到_Android面试题4–Activity之Intent的Flag

    再详细讲解之前先说一下一个小细节: Intent的setFlag和addFlag有什么区别?是不是之前都没有太注意这个问题呢? 简单可以理解成:setFlag是把之前的替换掉,addFlag是添加新的 ...

  9. android peopleactivity.java,Android面试基础篇---Activity(上)

    ** 前言: ** 一.生命周期 1.七个方法: 1.1:onCreate() 在这里创建界面,做一些数据的初始化工作 1.2:onStart() 可见不可交互 1.3:onResume() 可见可交 ...

  10. 马小妹的Android之旅——Android四大基本组件之Activity

    Android的四大基本组件分别是:Activity.Service服务.Context Provider内容提供者.BroadcastReceiver广播. 这篇主要写Activity. 什么是Ac ...

最新文章

  1. 2021.5.13指导论文
  2. 第37件事 极简设计的3个方面
  3. 带你手写基于 Spring 的可插拔式 RPC 框架(二)整体结构
  4. cad自动标注界址点_CAD制图中的5个小技巧
  5. linux组权限管理,linux 用户组权限管理(示例代码)
  6. 如何用SendMessage模拟某一按钮的点击事件
  7. JAVA进制及进制之间的转换
  8. you do not have permission
  9. leetcode 640. Solve the Equation | 640. 求解方程(字符串处理)
  10. 深入浅出Dotnet Core的项目结构变化
  11. tls1.1 tls1.2_Java 8将默认使用传输级别安全性(TLS)1.2
  12. C ++ 指针 | 指针与函数 实际运用_8
  13. cmd 命令 之 dir 之 强化使用
  14. C语言堆栈入门 —— 堆和栈的区别
  15. 44 The shopping psychology 购物心理
  16. selenium 自动化web测试
  17. Vagrant:将装在C盘的虚拟机移动到别的目录
  18. php如何优化递归函数,php递归函数怎么用才有效?php递归函数典型例子
  19. CAD二次开发--自动加载插件
  20. 20160909阿里校招数据研发工程师笔试总结

热门文章

  1. oracle vm virtualbox无网络连接_VirtualBox 安装 Windows 2000/XP 测试
  2. U磁盘检测和大量收集量产工具
  3. 《大师谈游戏设计——创意与节奏》【笔记一】
  4. 加密狗破解加密狗复制
  5. 鼠标单击变双击修正工具软件DoubleClickFix下载
  6. 如何让百度检索Github博客
  7. 简单了解机器学习(Machine Learning)
  8. 数据中心供配电系统继电保护基础知识
  9. 中东国家以色列Avatrade和Rami Kalish的故事
  10. 网络面试100道(路由交换)