Android Activity的4种启动模式图文介绍

前言

记得第一次探讨Activity的启动模式,是在2017年8月份,那个时候对一年后走出校门的未来很是憧憬,时间真快,已经毕业四个月,工作和生活也都趋于稳定。

一、小前言

相信很多人和我一样,在初学Android甚至初入职场的时候不了解Acticity的启动模式,或者为了面试刷题刷到了,但并不理解启动模式的作用,以及如何正确的使用启动模式而不是所有的都是用默认模式。

二、Activity启动模式简介

Activity有四种启动模式,standard、singleTop、singleTask、singleInstance,默认启动模式是standard

2.1 standard 模式

程序启动的时候,会默认创建一个任务栈,Activity是放在任务栈里面的,比如我们新建一个项目,默认生成一个ActivityA,那么此时任务栈是这样的:

​,比如我们在ActivityA中有一个按钮,点击按钮跳转到ActivityB,ActivityB中有一个按钮,点击按钮跳转到ActivityC,那么此时该栈是这样的:

那么如果在ActivityC中有个按钮跳转到ActivityB呢?没错,是再次创建一个ActivityB实例

那么此时,我们点击返回键,会首先移除栈顶的ActivityB,回到ActivityC,在移除栈顶的ActivityC回到ActivityB,以此类推。

当Activity全部退出时,系统会自动回收这个空栈。

2.2 singleTop模式

改变Activity的启动模式,可以在配置文件中为Activity添加lauchMode属性

singleTop模式为栈顶复用模式,通俗的说,就是如果栈顶的Activity和启动的Activity的是同一个,那么就直接复用,比如还是在ActivityA中跳转到ActivityB,我们将ActivityB的启动模式设置为singleTop,因为当前栈顶是ActivityA,不是ActivityB,所以会创建新的ActivityB实例放入任务栈中

现在我们在ActivityB中点击按钮跳转ActivityB,因为当前栈顶就是ActivityB所以会直接复用,此时栈内仍是ActivityB和ActivityA,此时点击返回按钮会直接退回到ActivityA。

2.3 singleTask 模式

singleTask是栈内复用模式,在这里栈内复用要区分要启动的Activity的所需栈是否是当前栈

2.3.1 是当前栈

比如现在有ActivityA 启动模式为singleTask ,在ActivityA中启动ActivityB,ActivityB在栈中不存在实例,则创建ActivityB实例,此时栈为:

假设现在在ActivityB中启动ActivityA,会在当前栈中是否有ActivityA,若有则将ActivityA移到栈内,将位于ActivityA之上的移出栈顶,那么现在栈为:

此时按返回键会直接退出程序,如果当前栈为

我们现在启动ActivityB中启动ActivityA,则会将位于ActivityA栈顶的ActivityB、ActivityC以及ActivityB移出栈顶,此时栈内只是有ActivityA。

2.3.1 不是当前栈

不是当前栈的情况比较特殊,这里简单介绍

假设当前任务栈是A,A栈中有ActivityA、ActivityB,在B中启动ActivityC,并且ActivityC所需的任务栈为B,栈B不存在所以会首先创建栈B,然后创建ActivityC实例放入栈B中

那么我们如何指定启动的Activity所需的栈名称,这里就要说TaskAffinity参数,这里我们参考官方文档:

developer.android.com/guide/topic

TaskAffinity可以理解为任务亲属性或相关性,默认情况下,应用中的所有 Activity 都具有相同的亲和关系

默认任务栈的名字为应用包名,同样我们可以在配置文件中设置TaskAffinity属性,但必须和singleTask启动模式配对使用

2.4 singleInstance模式

singleInstance模式也是"栈内"复用模式,不过,比如现在当前栈中有ActivityA,我们在A中启动ActivityB,ActivityB的启动模式是singleInstance,此时会创建一个新的任务栈,创建ActivityB实例将ActivityB放在新的任务栈中

2.5 Java代码设置启动模式

除了在配置文件中,我们还可以通过在Java代码中设置启动模式

intent.setFlags();

singleTask 对应 FLAG_ACTIVITY_NEW_TASK

singleTop 对应 FLAG_ACTIVITY_SINGLE_TOP

到此这篇关于Android Activity的4种启动模式的文章就介绍到这了,更多相关Android Activity的4种启动模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何正确理解和使用Activity的4种启动模式

    关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用. Activity的启动模式有4种,分别是standard.singleTop. SingleTask. singleInstance,可以在AndroidMainifest.xml文件中指定每一个Activity的启动模式.一个Android应用一般都会有多个Activity,系统会通过任务栈来管理这些Activity,栈是一种

  • 简单介绍Android中Activity的四种启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例:如果栈顶

  • 详解Activity之singletast启动模式及如何使用intent传值

    Activity的四种启动模式: 1. standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中. 2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例). 3. singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent()).重用时,会让该实例回到栈顶,因此在它

  • Android Activity启动模式之singleTask实例详解

    本文实例分析了Android Activity启动模式之singleTask.分享给大家供大家参考,具体如下: 前面的文章介绍了Android 活动Activity的启动模式:standard 和singleTop .本文继续介绍Activity的下一个启动模式:singleTask. singleTask:当设置活动的启动模式为singleTask时,首先检查返回栈中是否存在当前活动,如果存在当前活动的实例,则直接使用当前实例,并把当前活动之上的所有活动pop出栈,即当前活动位于栈顶位置. 代

  • Activity 四种启动模式详细介绍

    Activity 四种启动模式详细介绍 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /&

  • Android中Activity生命周期和启动模式详解

    Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法. 再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,A

  • Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)

    当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中.Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置. 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.singleTop.s

  • Android Activity启动模式之singleTop实例详解

    本文实例讲述了Android Activity启动模式之singleTop.分享给大家供大家参考,具体如下: 在前面文章<Android Activity启动模式之standard实例详解>中,我们介绍了活动的默认启动模式standard,本文继续介绍Activity的singleTop模式. singleTop模式:当Activity的活动模式设置为singleTop时,在启动活动时首先检查栈顶活动是否是该活动,如果是,在使用当前实例,否则继续创建新的实例. (1)修改AndroidMani

  • Android Activity启动模式全面解析

    在android里,有4种activity的启动模式,分别为: "standard" (默认) "singleTop" "singleTask" "singleInstance" 在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask, singleIn

  • Android Activity启动模式之standard实例详解

    本文实例讲述了Android Activity启动模式之standard.分享给大家供大家参考,具体如下: Android的活动是通过任务Task来进行管理的,一个任务就是一组放在栈里的活动的集合,即所谓的返回栈(Back Stack).栈具有先进后出.后进先出的特性.当启动一个活动时,活动会在返回栈中入栈,处于栈顶位置,当按下返回键或者调用finish方法会销毁一个活动,此时栈顶活动会出栈,届时又会有新的活动处于栈顶位置. 在Android中,活动的启动模式有四种,根据不同的需求可以为活动设置

随机推荐