热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android学习笔记启动模式与任务栈(Task)

看来看去,关于启动模式和任务栈的还是觉得这位博主写的好,有例子便于理解。记录下来,以后方便查阅和添加笔记。Activity启动模式与任务栈

看来看去,关于启动模式和任务栈的还是觉得这位博主写的好,有例子便于理解。记录下来,以后方便查阅和添加笔记。

 

Activity启动模式与任务栈(Task)全面深入记录(上):https://blog.csdn.net/javazejian/article/details/52071885

Activity启动模式与任务栈(Task)全面深入记录(下):https://blog.csdn.net/javazejian/article/details/52072131

 

然后记住

taskAffinity属性是标识着Activity所需要的任务栈的名称,不要与当前应用包名相同,否则其值跟作废没两样。

allowTaskReparenting主要作用是activity的迁移,即从一个task迁移到另一个task,这个迁移跟activity的taskAffinity有关。

具体原因见上面Activity启动模式与任务栈(Task)全面深入记录(下)

 

==================以下开始做笔记======================

下表可能有助于区分不同的启动方式:


启动模式Default实例化是否启动新任务是否允许在任务中启动其他activity
standard每次创建intent时,都会创建一个新实例。此外,实例可以是多个任务的成员,也可以是一个任务中的多个实例。否。在发起意图的同一任务中打开
singleTop与标准完全相同,但如果活动位于Task堆栈的顶部,则使用现有实例。否。在发起意图的同一任务中打开
singleTask单实例

是。只要设置其他任务栈就是根任务。

singleInstance单实例是。总是根任务。决不允许。始终是任务中唯一的活动

可以在Terminal通过 adb shell dumpsys activity activities 命令查看此时栈的情况,只看Running activities (most recent first)即可

情景一:

就是如果应用启动默认的A,A再启动singleTask的B,B的taskAffinity设置了另一个任务栈,此时B再启动默认的C,是这样的 

也就是singleTask的B启动默认的C会和B在同一个任务栈

但是如果B是singleInstance呢?

B再启动默认的C就是在原来的任务栈,而不是和B在一个任务栈。

关于基本用例分析见这里https://blog.csdn.net/zjwfan/article/details/52047719

情景二:

是关于向上导航的,其中需要指定父活动。

要实现向上导航,第一步是声明哪个活动是每个活动的适当父级。这样做允许系统便于导航模式,例如Up,因为系统可以从清单文件中确定逻辑父活动。

从Android 4.1(API级别16)开始,您可以通过在元素中指定android:parentActivityName属性来声明每个活动的逻辑父级。

如果您的应用支持Android 4.0及更低版本,请在您的应用中添加支持库,并在中添加元素。然后将父活动指定为android.support.PARENT_ACTIVITY的值,与android:parentActivityName属性匹配。

如下:

......

要在用户按下应用程序图标时向上导航,可以使用NavUtils类的静态方法navigateUpFromSameTask()。当您调用此方法时,它将完成当前活动并启动(或恢复)相应的父活动。如果目标父活动位于任务的后台堆栈中,则会将其提前。它的提出方式取决于父活动是否能够处理onNewIntent()调用:

如果父活动的启动模式,或者向上的意图包含FLAG_ACTIVITY_CLEAR_TOP,则父活动将被带到堆栈顶部,并通过其onNewIntent()方法接收intent。

如果父活动具有启动模式,并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP,则从堆栈弹出父活动,并在堆栈顶部创建该活动的新实例以接收意图。也就是说父活动会onDestroy()后重新onCreate()。

官方文档:https://developer.android.google.cn/training/implementing-navigation/ancestral?utm_source=udacity&utm_medium=course&utm_campaign=android_basics

 

========================Talk is cheap, show me the code======================

 


推荐阅读
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
author-avatar
手机用户2502938137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有