尬聊一场启动模式

作者: 一只小松 | 来源:发表于2017-03-15 23:46 被阅读0次

为什么需要启动模式

Android系统使用任务栈的结构存放Activity的实例,众所周知,栈结构遵循先进后出的执行原则。所以这就是为什么当你按回退键的时候之前的页面会一个个弹出来,当这个任务栈存放的Activity实例都被弹出栈的时候,你就回到了手机桌面。相信很多QA们在测试的时候都会发现一个问题,页面中的一个按钮快速点击多下,会打开好几个二级页面,这就是Activtiy默认启动模式在起作用。

启动模式

  • standard(标准模式,也是默认模式)
  • singleTop(栈顶复用)
  • singleTask(栈内复用)
  • singleInstance(单实例模式)

特点

1.standard

每次启动一个Activity都会创建一个新的实例。这种模式下,遵循的一个原则是谁启动的,这个实例就会添加到启动他的那个Activity所在的栈中。可以这样理解,你在应用1的Activity_A中启动了应用2的Activity_C,当你再打开应用2的时候会进入应用2的启动页Activity_B,而不是应用2的Activity_C;

2.singleTask

每次启动一个Activity,比如Activity_A,会先去寻找这个Activity_A想要的任务栈(应用中的Activity默认运行在自己应用的任务栈中,后续深入讲解),不存在就创建任务栈然后创建Activity_A实例并入栈。如果想要的任务栈存在,并且栈内有这个Activity_A的实例则复用,将栈内该实例以上的其他Activity实例顺次弹出栈,则我们需要启动的Activity_A就回到栈顶并调用它的onNewIntent(之后onResume);如果栈内实例不存在,就创建实例并压入栈。

3.singleTop

此模式和singleTask类似,例如,如果当前需要启动的Activity_A位于任务栈的栈顶,则复用这个Activity_A的实例并调用它的onNewIntent(之后onResume)。如果需要启动的Activity_A的实例不处于栈顶,而在栈中,则需要重新创建实例并压入栈。

4.singleInstance

这个启动模式相对比较特殊。它除了具有singleTask的一切特性外,显著的一个特点是这种启动模式的Activity只能单独位于一个任务栈内;系统为其分配一个新的单独的任务栈,这个Activity的实例独自运行在栈内。

TaskAffinity

TaskAffinity用于标识一个任务栈,通常我们并没有在AndroidManifest文件中看到此参数的声明,因为应用下的所有Activity的任务栈名字默认为包名
这个参数一般和SingleTask模式更配,一起配对使用效果更佳哦,用于标识这种启动模式的Activity应该运行于哪个任务栈中。

使用

  1. AndroidManifest文件中声明
<activity
        android:name=".XyActivity"
        android:launchMode="singleTask"/>
  1. 代码动态设置
Intent intent = new Intent(xxx.this, XXX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

在模拟测试的过程中,可以使用 adb shell dumpsys activities 命令查看任务栈及其中的activity实例以验证自己的猜想。

相关文章

  • 尬聊一场启动模式

    为什么需要启动模式 Android系统使用任务栈的结构存放Activity的实例,众所周知,栈结构遵循先进后出的执...

  • 尬聊设计模式

    什么是设计模式? 我们都知道做任何事情都有经验方法可寻,这些经验方法也是我们平时所说的“套路”。像《梦入神机》这样...

  • 尬聊模式开启。

    嗨,你好呀,你几岁了? 我23。 吃饭了吗? 吃了。 吃的啥饭? 米饭。 菜呢? 酸菜鱼。 好吃吗? 还行。 用什...

  • 尬聊的聊尬聊的尬

    挂完电话,我不禁哑然失笑,觉得我们刚才几分钟的聊天完全是在自由区平行穿梭,完美的诠释了尬聊的最高境界。 朋友说:路...

  • 聊着聊着就把天聊死了?学会这招不再尬聊!

    每一场尬聊的背后,都有一个自恋的灵魂 如果你在一场聊天中听到了以下这些句子,你可能遇到了一次尬聊。 审问型:在聊天...

  • 尬聊不尬聊

    1. 在男性聚集的D论坛上,常看到这种帖子: “我要到一个女生的微信。不知道怎么去聊啊,总是聊几句就没下文了,该怎...

  • 拒绝尬聊,拒绝尬聊,拒绝尬聊

    明明好友列表中有很多女生,但能聊上几句话的却没有几个。其他的要么就是不太熟悉,要么就是不知道怎样开口。 想和女生聊...

  • 论尬聊

    1.你们认为的尬聊是怎样的? 2.尬聊是什么原因产生的? 3.如何打破尬聊的局面? 4.避免尬聊的最好方法?

  • 今日歌单:《丹青客》《醉梦前尘》《意难平》

    洗澡去聊~澡堂ktv模式即将启动……

  • 不负时光不负卿(11)处处闻尬聊

    第11章处处闻尬聊 尬聊,是尬社交的重要组成部分。人生何处无尬聊,总有那么一个人让你知道‘多么尬的领悟’。 洗完冷...

网友评论

    本文标题:尬聊一场启动模式

    本文链接:https://www.haomeiwen.com/subject/vebrnttx.html