热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidActivity的4种启动模式图文介绍

这篇文章主要给大家介绍了关于AndroidActivity的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种启动模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
author-avatar
宝贝小妖精芳_555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有