第一次学习Android中一个很重要的概念,启动模式。文章记录的也只是一些入门知识,随着学习的深入还会有activity启动模式的学习(2)和(3)。 下面分三个小点说一下对启动模式的理解区别以及如何设置。

预备知识

(1)activity是以任务栈的方式进行管理的,栈是一种先进后出的数据结构,栈中的activity只能通过出栈和压栈的方式改变顺序。 (2)启动一个application的时候,系统会默认创建一个任务栈,默认启动的activity都在同一个任务栈中。当启动另一个应用,之前那个任务栈就会被移到后台,成为后台任务栈,而刚启动的那个任务栈就被调到前台,成为前台任务栈。在用户面前显示的始终是前台任务栈中的栈顶activity。

对四种启动模式的理解

Android里面说的启动模式其实就是activity的启动方式。 有下面四种

  • standard(默认)
  • singleTop(栈顶复用)
  • singleTask(栈内复用)
  • singleInstance(单例)

standard--系统默认的activity启动模式,不管此时任务栈中的情况如何,每次启动一个activity,系统都会创建它的实例,并将其置于栈顶。

singleTop--另外一种常用的启动模式,当启动一个activity时,系统会检查一下当前任务栈中是否已经存在该activity实例,如果已经存在,就通过onNewIntent获得该实例把它置于栈顶。如果没有。那么创建该activity实例后将其置于栈顶。

singleTask-- 当以这种模式启动activity的时候,需要指定其任务栈。 activityA启动activityB的时候,会先在系统寻找是否存在该栈。

  • 不存在,创建栈并创建activity实例置于栈顶。
  • 存在,则在栈中寻找是否有B的实例,若有,则就通过onNewIntent获得该实例至于栈顶。无则创建该activity实例后将其置于栈顶。

singleInstance--看到名字就会想到单例模式是吧~是的,确实也是这样的思想。为了充分利用activity实例达到极致,设置这个启动模式后,activityA启动activityB,会专门为activityB创建一个任务栈,并且创建activityB实例至于栈顶。该activity实例便可被系统内的应用共享。

总结

对于时不时想把某个activity展示在用户面前这件事,使用 默认:不管在不在栈顶,都创建(该栈中可能有多个实例)->栈顶复用:若在栈顶,则复用(该栈中可能有多个实例,但相对默认模式,少了点)->栈内复用:瞅瞅这个栈中有没有,有就用,没有就造一个(该栈中只有一个实例)->单例:直接自成一派,创个栈,只有这个activity一个实例并且在栈顶,不管哪个应用程序都能用(该应用程序上下文中只有一个实例)。 弄明白了这几种启动模式后,就需要根据实际情况决定使用哪种启动模式。

具体使用场景

由于本人目前对启动模式的使用比较少,后续有更多再补充。

  • 场景:使通知栏弹出Notification,点击Notification跳转到指定的Activity。 假设现在处于栈顶展示在用户面前的就是这个activity。如果是默认模式,则会再次打开当前的Activity。这样展示在用户面前的效果就会很奇怪。(看起来是闪了一下) 如果使用的启动模式是singleTop,就会避免这种现象的出现。

  • 场景:假设我们的程序中有一个Activity是允许其他程序调用的,我们想让其他程序共享这个Activity的实例。如果使用的启动模式是singleInstance,就可以解决这个问题。

如何设置activity的启动模式

一般有两种方式设置。

  • 在manifast文件中通过activity的launchMode进行设置。
  • 通过对启动该activity的intent设置标志位实现。

疑惑及解答

1.如何设置不同的任务栈?

2.当activityA以标准模式启动B的时候,B的实例被创建且处于activityA任务栈的顶端,那么这个时候B启动了A(standard)呢?

3.这两种设置方式有什么区别呢?常用的标志位有好几个,组合起来使用又有什么不同的效果呢?

这些个答案等我下一篇文章再继续介绍哈~敬请关注Android初级开发笔记-- activity启动模式的学习(2)~

作者介绍

  • 杨晓华:广州芦苇科技 APP 团队 Android 实习生

内推信息

  • 我们正在招募小伙伴,有兴趣的小伙伴可以把简历发到 app@talkmoney.cn,备注:来自掘金社区
  • 详情可以戳这里--> 广州芦苇信息科技

转载于:https://juejin.im/post/5cf3f929f265da1b8d1605c5

Android初级开发笔记-- activity启动模式的学习(1)相关推荐

  1. 【安卓开发 】Android初级开发(二)Activity启动模式

    Activity页面跳转在业务逻辑页面添加以下代码 //跳转到下一个activityIntent intent = new Intent(this,MainActivity2.class);start ...

  2. 【安卓开发 】Android初级开发(六)Activity生命周期

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setC ...

  3. Android系统(187)---最易懂的Activity启动模式详解

    Android基础:最易懂的Activity启动模式详解 前言 Android基础中,Activity的启动模式非常重要 本文将全面介绍 Activity的启动模式 目录 目录 1. 定义 即Acti ...

  4. 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )

    文章目录 一. 安卓应用任务栈管理 二. 任务与返回堆栈回顾 三. 返回堆栈清除 四. 关于亲和性回顾 五. Activity 启动模式 LaunchMode 补充 ( standard | sing ...

  5. android activity启动模式_从0系统学Android--2.5Activity启动模式

    本系列文章目录:更多精品文章分类 本系列持续更新中-. Activity 的启动模式一共有四种,分别是:standard.singleTop.singleTask.singleInstance .在实 ...

  6. Android利用activity启动模式退出整个应用

    Android利用activity启动模式退出整个应用 作者:翔星幻羽发布于:02月22日 13:39访问(22)评论(0) Android利用activity启动模式退出整个应用 分类: andro ...

  7. Android activity启动模式

    如何正确理解和使用 Activity的4种启动模式 关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法 ...

  8. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  9. Android中Activity启动模式

    Android中Activity启动模式一共是四种,这里我写一下我对其的理解: 1.standard(默认) 2.singleTop,如果某个Activity设置了该属性,且当前Activity就是这 ...

最新文章

  1. 《资本说》如何帮助企业从“0”到“1”,看王波玩转投资攻略
  2. hdu4864 贪心
  3. nginx在linux reload报错,linux下安装nginx
  4. linux kernel中的wait_for_completion和complete总结
  5. matlab散点光滑连线,科研画图:散点连接并平滑(基于Matlab和Python)
  6. jsonarray转liast_jsonArray转换成List
  7. npm安装与卸载和cordova及ionic项目打包调试等相关命令总结归纳
  8. 什么是.NET应用程序域
  9. HTTP请求/响应原理
  10. linux socket监听端口,Linux-socket使用
  11. XMAPP启动apache和mysql失败的问题
  12. 无线攻击入侵工具清单
  13. KEIL编译程序电脑卡的问题
  14. 链塔短评合集| XAS、ARDR为BB级,LSK为B级
  15. cvs配电保护断路器_施耐德断路器CVS100N详解
  16. python销售数据分析方法_Python数据分析之药品销售案例分析(上)
  17. 一张图看懂VLAN数据帧接收流程中Access端口与Trunk端口的工作流程
  18. 吉林大学计算机动画与游戏导师,吉林大学计算机 导师联系方式
  19. 隐私泄露、AI换脸存风险 11家企业被约谈
  20. SpringBoot如何整合前端页面

热门文章

  1. python redis集群_Python3 redis集群连接 (带密码验证)
  2. RHCSA7-NOTE(红帽管理员-题库详细笔记)
  3. qt 定义一个长度的数组,Qt - 声明一个QLabel数组并将其添加到QTabWidget的选项卡
  4. page fault in nonpaged area 蓝屏_由于错误的更新,安装Windows 10 KB4549951后蓝屏死机解决办法...
  5. mysql 去重 根据id_mycat数据库集群系列之mysql主从同步设置
  6. php屏幕抓取,关于屏幕抓取:如何在PHP中实现Web scraper?
  7. Java设计模式(十九):解释器设计模式
  8. 数据结构和算法:第七章 排序
  9. webpack项目上传云服务器,webpack项目上传云服务器
  10. linux 不关机添加硬盘,完美解决Ubuntu Linux关机异响[SATA硬盘]