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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Plants Vs Zombies Online_vascular plant

    Plants Vs Zombies Online_vascular plant24 83 2 6 63 910 10 164题解贪心+二分#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 2e5 + 10;ll a[N],st[N]; int n,m;bool check(ll x){ memset(st,0,sizeof st); ll cnt = 0; for(int i = 1;i <= ..

    2022年8月8日
    6
  • idealC-2021.5 x64激活码(最新序列号破解)

    idealC-2021.5 x64激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    107
  • http状态码500_常用的http响应状态码

    http状态码500_常用的http响应状态码一些常见的状态码为:200-服务器成功返回网页404-请求的网页不存在503-服务不可用详细分解:1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码说明100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。…

    2022年4月19日
    45
  • 多模态理论张德禄_学术会议 | 适用语言学与多模态国际会议

    多模态理论张德禄_学术会议 | 适用语言学与多模态国际会议适用语言学与多模态国际会议回执时间:2019年5月31日会议时间:2019年8月9-11日会议地点:上海交通大学(闵行校区)上海交通大学马丁适用语言学研究中心定于2019年8月9日至11日举办适用语言学与多模态国际会议。本次会议重点探讨语言学适用研究、多模态话语分析、数字媒体信息传播等跨学科问题。特邀布莱梅大学JohnBateman教授、悉尼大学JamesMartin教…

    2022年7月25日
    13
  • css中100vh 加减运算[通俗易懂]

    css中100vh 加减运算[通俗易懂]vh/vwvh:相对于视窗的高度,视窗被均分为100单位的vh;vw:相对于视窗的宽度,视窗被均分为100单位的vw;vmax:相对于视窗的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax;vmin:相对于视窗的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin;视区所指为浏览器内部的可视区域大小,即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。calcca…

    2022年5月5日
    55
  • C++中的仿函数使用

    C++中的仿函数使用

    2021年11月20日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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