Android的启动模式:singleTask与singleTop的使用

Android的启动模式:singleTask与singleTop的使用最近有小伙伴询问Activity的启动模式是使用singleTask好还是singleTop好,在两种模式中纠结,所以今天就简单讲解一下两种模式的使用场景!Android的四种启动模式(网上一搜一堆哦)standard:默认模式,允许多实例singleTop:相比于standard,有新的启动请求时,只有在目标Activity处于当前栈顶时,才会调用onNewIntent()…

大家好,又见面了,我是你们的朋友全栈君。

最近有小伙伴询问Activity的启动模式是使用singleTask好还是singleTop好,在两种模式中纠结,所以今天就简单讲解一下两种模式的使用场景!

推荐

Android 的四种启动模式(网上一搜一堆哦)

  • standard:默认模式,允许多实例
  • singleTop:相比于standard,有新的启动请求时,只有在目标Activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致
  • singleTask:设置了singleTask启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了singleTask启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。如果设置了singleTask启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
  • singleInstance:和singleTask相比,不同点在于singleInstance activity所在的task只会有这一个activity

Activity的任务栈(Task)简述

  • Application启动时,系统会为Application创建一个任务栈(Task)
  • 我们对Activity的打开和关闭操作,就是将Activity压入(push)任务栈和从任务栈中弹出(pop)的操作
  • 任务栈遵循先进后出的原则,在栈顶的Activity就是设备当前显示的Activity
  • singleTasksingleTop一般都是为了保证Activity在任务栈中的唯一性

singleTop的使用

使用singleTop模式的Activity在栈顶时只会在Task中存在一个实例,所以可以在以下场景中使用:

  • 要打开的Activity处于栈顶,点击通知栏打开栈顶的Activity
  • Activity需要启动一个Service,最后Service对栈顶Activity进行操作
  • 特定情况时,如进行数据刷新,自己跳转自己,走onNewIntent()刷新数据
  • 等等…

总之,singleTop比较适用于childActivity(非主架构Activity,例如MainActivity)

singleTask的使用

  • 当Task中存在Activity实例,不会创建Activity,而是销毁Activity上面所有其他的Activity,以此来使将要跳转的Activity至于栈顶显示,如果不存在,则在栈顶创建一个Activity实例(所以假如有人问如何快速关闭100个Activity,只要给跳转的Activity设置singleTask即可
  • 单独的使用singleTask,并不会创建一个新的Task
  • singleTask的Activity如果设置了独立的taskAffinity属性值,启动时就会在新的Task中,否则会在已有Task中

所以基于以上特性,比较适合主架构Activity(例MainActivity)设置为singleTask,或者一些经常使用,但是关闭和跳转不规律的Activity

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/124903.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Intellij IDEA 查找接口实现类的快捷键「建议收藏」

    Intellij IDEA 查找接口实现类的快捷键「建议收藏」查找接口的实现类:IDEA风格ctrl+alt+B在按F2查看详细文档注解查看类或接口的继承关系:ctrl+h1、IDEA_查找接口的实现的快捷键 个人分类管理http://blog.csdn.net/u010003835/article/details/790366662、intellijidea8.1.2中找到实现一个类或者接口子类的快捷键 https://zhidao.ba…

  • requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement

    requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement

    2021年10月20日
  • Maven打包——配置文件

    Maven打包——配置文件当我们需要打包一些灵活性(有可能经常修改代码)的代码时,会遇到这样的问题:每次修改代码完以后,得需要重新对代码进行打包,重新上传使用。此时,我们可以将一些经常修改的代码放置在配置文件中,以便灵活修改,修改时,只需在打包好的压缩包中进行配置的修改,保存即可,无需重新打包。…

  • pycharm激活成功教程失败后重装也打不开_pycharm2019.3激活码

    pycharm激活成功教程失败后重装也打不开_pycharm2019.3激活码1.先声明一下,这种解决方法适用于任何版本的永久激活成功教程启动不了的情况(包括:2019版本的)2.下面直接切入正题之所以我们激活成功教程之后,不能正常启动的原因有两种:①之前pycharm可以正常的使用,突然有一天,就启动不了了,这种一般是系统的环境变量出了问题;②在第二次安装别的版本时,残留了之前的环境配置历史3.不管是以上哪种情况,同一的解决方法是:进入C盘目录,找到用户文件,可以找到下面…

  • Python画图爱心_python语言画爱心

    Python画图爱心_python语言画爱心都说程序员不浪漫,上次看到一个程序员小哥给自己老婆开发了一个专属的APP。其实程序员还有更多美好的事情可以做,比如,给你喜欢的妹纸,用代码的方式去表白(当然可能还有一些前戏啥的,自己结合实际场景再渲染下),直接上代码:print’\n’.join([”.join([(‘loveyou'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y…

  • Hadoop生态圈hive应用

    Hadoop生态圈hive应用第1章Hive基本概念1.1什么是HiveHive:由Facebook开源用于解决海量结构化日志的数据统计。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。1.2Hive的优缺点1.2.1优点1)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。2)避免了去写MapReduce,减少开发人员的学习成本。3)Hive的执行延迟比较高,因此Hive常用于数

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号