Android中activity任务亲和力问题

Activity - 管理任务(一) 处理亲和性 (taskAffinity) 将 FLAG_ACTIVITY_NEW_TASK 添加到传递给 startActivity() 的 intent 中。默认情况下,新 Activity 会启动到调用 startActivity() 的 Activity 的。Activity 时,该天气预报 Activity 最初会和您的 Activity。该 Activity 与同一应用中的其他 Activity 具有相同的亲和性(因此,在默认情况下,同一应用中的所有 Activity 都倾向于位于。默认情况下,同一应用中的所有 Activity。 阅读详情


首先是activity开启方式:

Standard:默认,窗口类可以实例化多次
singleTop: 在一些特殊情况下,为了避免糟糕的用户体验,如果发现任务栈的栈顶已经存在这个activity,再去开启activity的时候,就
不去重新创建新的activity,而是复用这个栈顶已经存在的activity.这种模式叫singleTop的启动模式,避免同一个界面被重复的开启
singleTask: 开启一个activity B的时候,检查任务栈里面是否有这个activity B存在,如果存在的话,清空这个任务栈上面的所有的activity,
复用这个activity B,作用,避免创建过多的浏览器activity的实例,节约内存空间,节约CPU资源,不要创建过多的应用程序的界面
singleInstance: 会去开启一个新的任务栈,任务栈里面只有一个activity的实例存在,如果这个activity被开启,把这个任务栈
放在前面,如果开启了新的activity,别的activity所在的任务栈会被放在前面,这种模式非常的极端,在整个手机的操作系统里,只会有一个


理解和处理任务亲和力

  亲和力表明了一个activity"心仪"哪个任务.默认下,属于同一个应用的所有activitie之间具有相同的任务亲和力.所以,默认下,一个应用的所有activitie首选属于同一任务.然而,你可以修改一个activity的默认任务亲和力.定义于不同应用的Activitie可以具有相同的任务亲和力,或者同一应用中的activitie可以分配不同的任务亲和力.


在API文档中与该亲和力相关的属性有两个: android:allowTaskReparenting,android:taskAffinity。

android:allowTaskReparenting ---->

用法:<application android:allowTaskReparenting="true/false"></application>
是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务。

用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。


属性概念:

我称之为是否具有亲和力。如果这个属性设置在<application>中,默认值是false,通常当一个活动开始时,它与启动它的活动的任务关联,它的整个生命周期都停留在这个任务栈中。您可以使用此属性来将它强制重定位到具有亲和性的其他任务中,而当前的主要任务不再显示。通常情况下,它用于导致应用程序的活动移动到与该应用程序相关联的主要任务。当当前的Task不再显示时,你可以使用这个特性来强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另一个应用程序的主Task中。

如果一个电子邮件包含一个链接到一个网页,点击链接带来了一个活动,可以显示页面。该活动是由浏览器应用程序定义的,但作为电子邮件任务的一部分启动。如果它被重定位到浏览器的任务,它将显示在浏览器下来到面前,并将在电子邮件任务又缺席了。


Actvity的affinity是由taskAffinity特性定义的,称之为亲和对象。Task的affinity是通过读取根Activity的affinity 决定。在,判断具有

亲和力之后,寻找通过该属性定义的任务栈,如何有则会加载进去,没有则会根据Flag来判断是否创建任务栈。


第一种情况。如果该Activity的allowTaskReparenting设置为true,它进入后台,当一个和它有相同affinity的Task进入前台时,它会取消之前的亲和力,

进入到该前台的task中。 

例如:在两个工程中,activity1和activity2,activity1,activity2中的<activity>中都添加android:taskAffinity="com.example.activity2"(包名)而

activity1中的<activity>在添加android:allowTaskReparenting="true"使其允许添加亲和性。在运行时当打开activity1后home键(不要按返回)放置后台

栈中,再打开activity2时会发现打开了activity1界面。这就是在加载activity2时,activity1也加载到新创建的activity2栈中并显示出来。


第二种情况。如果加载某个Activity的intent,Flag被设置成FLAG_ACTIVITY_NEW_TASK时,它会首先检查是否存在与自己taskAffinity相同的Task,如

果存在,那么它会直接宿主到该Task中,如果不存在则重新创建Task。

例如:在activity1中不设置亲和力(allowTaskReparenting),但要设置他的任务栈,也就是亲和对象是自己。而在activity2中设置一个intent来打

开一个新的activityS,注意在设置的intent的Flag属性为FLAG_ACTIVITY_NEW_TASK,并在清单文件中设置activityS的亲和力为true,亲和对象为

activity1。完成后就可以逐一运行了。当打开activity1后home键返回后打开activity2并点击按钮打开activityS,发现没有任何意外。但是在返回的时候发

现activityS跳到了activity1最后跳到了activity2。


  亲和力在以下两种情况起作用:

  • 当启动一个activity的intent包含FLAG_ACTIVITY_NEW_TASK标志.

      一个新的activity默认是在调用startActivity()的activity所在的任务中安置.然而,如果传给startActivity()的intent包含了FLAG_ACTIVITY_NEW_TASK标志,系统就会查找另一个能安置这个新activity的任务.通常,它会是一个新任务.然而但是,并不是必须这样做.如果有一个已存在的任务具有与新activity相同的亲和力,那么这个activity就被启动并安置到这个已存在的任务中.如果没有这样的任务,才开始一个新的任务.

      如果这个标志导致了一个activity在一个新的任务中启动然后用户按下了HOME键离开了这个新任务,那么必须有一些方法使得用户可以重新回到这个任务.一些实体(比如通知管理器)总是在一个另外的任务中启动activity而从不作为自己任务的一部分,于是它总是把FLAG_ACTIVITY_NEW_TASK设置到传给startActivity()的intents中.如果你有一个activity可以被外部实体使用这个标志调用,应小心用户可能用一个独立的方法回到这个启动的任务,比如使用启动图标(任务的根activity有一个CATEGORY_LAUNCHERintent 过滤器).-翻译得挺难受,这句话也就是说,只要使用了相同的亲和力,用户就能回到这个已启动的任务中.

  • 当一个activity的allowTaskReparenting属性为"true"时.

      在此情况下,activity可以从启动它的任务移动到一个亲和的任务中,当后一个任务来到前台时.

      例如,假设一个报告所选城市的天气状况的activity是作为一个旅游应用的一部分.它与同一个应用中的其它activity具有相同的亲和力(默认的application亲合力)并且它被允许重认父母.当你的一个activity启动了这个天气预报activity,它起初是与你的actvity属于同一个任务.然而,当旅游应用的任务进入前台时,天气预报activity就被重新分配到这个任务并在其只显示.

基础总结篇之三:Activity的task相关 古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。南宋.陸遊《冬夜讀書示子聿(yù)》 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物。今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践。 今天我们来讲一下Activity的task相关内容。 上次我们讲到Activ 阅读详情

相关推荐

医学图像可视化实战:ITK-SNAP与Python+SimpleITK双方案解析

本文深入解析了医学图像可视化的两大核心方案:ITK-SNAP与Python+SimpleITK。ITK-SNAP作为专业无损浏览器,是数据探索与分析的必备工具;而Python+SimpleITK方案则提供了自动化处理能力,但需注意将.nii.gz数据转换为JPG等格式时的信息损失。文章通过实战对比,为医学影像处理者提供了清晰的选择指南与避坑建议。

ol789012的博客 490

【Android 应用开发】Activity 任务亲和性 taskAffinity 设置 ( taskAffinity 属性 )

I . 任务亲和性 ( taskAffinity ) 简介 II . 任务亲和性 ( taskAffinity ) 设置 III . 任务亲和性 ( taskAffinity ) 与 FLAG_ACTIVITY_NEW_TASK 标记 IV . 任务亲和性 ( taskAffinity ) 与 android:allowTaskReparenting 属性

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3575

【软路由】旁路由使用配置教程

【软路由】旁路由使用配置教程简介旁路由好处旁路由配置步骤1、修改管理地址网段 简介 我们都知道,软路由一般有两种使用方式,一种是作为承担DHCP分配的主路由,而另一种就是作为不承担DHCP分配功能的旁路由使用。今天就来介绍如何将软路由配置成为旁路由。 旁路由好处 旁路由最大的好处就是它不承担DHCP分配任务,这意味着它的对网络的影响极小。即使突然故障也不会导致整个网络瘫痪。更别提软路由的配置复杂,用户可能还经常修改上面的网络配置,一旦出错就是整个网络瘫痪,如果家中还有其他人使用网络,影响实在是不好。 建议有

博客 4万+

Android application 和 activity 标签详解

Application 标签 android:allowTaskReparenting   android:allowTaskReparenting=[“true” | “false”]  表明了这个应用在 reset task 时,它的所有 activity 是否可以从打开它们的 task 栈中迁移到它们声明的 taskAffinity 亲和性(taskAffinity 属性可以查看我的...

weixin_34414196的博客 791

逆向分析PerimeterX px3:从混淆JS到生成有效令牌的完整实战

在Web安全与数据采集领域,反自动化防护是保障服务稳定和数据安全的关键技术。其核心原理是通过收集浏览器环境指纹和用户行为特征,动态生成加密令牌来区分真人用户与自动化脚本。这项技术的工程价值在于平衡安全性与用户体验,广泛应用于电商、金融、社交等需要防止恶意爬虫和自动化攻击的场景。本文聚焦于业界广泛部署的PerimeterX px3防护方案,通过JavaScript逆向工程,深入剖析其令牌生成机制。我们将探讨如何运用动态调试、反混淆工具和算法还原等关键技术,突破px3的防护壁垒,为自动化测试和数据采集提供稳定可

diankui6178的博客 538

R3LIVE项目实战(3) —双目相机与激光雷达 lidar_camera_calib联合标定

lidar_camera_calib是一个在无目标环境中,用于高分辨率LiDAR(例如Livox)和摄像机之间准确的外部标定工具。我们的算法可以在室内和室外场景中运行,并且只需要场景中的边缘信息。如果场景适合,我们可以实现类似于或甚至超过基于目标的方法的像素级准确度。我们使用标定的外部参数给点云上色,并与实际图像进行比较。A和C是点云的局部放大视图。B和D是与A和C中的点云对应的摄像机图像的部分。

几度春风里的博客 4059

Android 任务、回退栈、亲和度以及相关FLAG说明

Android 任务、回退栈、亲和度以及相关FLAG说明亲和度Intent.FLAG_ACTIVITY_NEW_TASK清除返回堆栈 Activity 3种属性 亲和度 任务亲和度是一个字符串,来自于根Activity的亲和度。 亲和度在如下两种情况下起作用: 1. 当启动 Activity 的 intent 包含 FLAG_ACTIVITY_NEW_TASK 标记时 2. 当 Activity 的 allowTaskReparenting 属性设为 “true” 时 Intent.FLAG_ACTIVI

linnnnn.的博客 396

01-系统技术架构师必备——软件架构设计基础与核心概念

摘要 本文系统阐述了软件架构设计的核心概念与方法论,重点涵盖以下内容:1)软件架构的四大要素(构件、连接件、约束、配置)及其边界划分;2)Garlan & Shaw五大架构风格(数据流、调用/返回、独立构件、虚拟机、仓库)的典型应用场景;3)基于电商库存系统的架构选型实战案例,展示如何根据业务需求(高并发、最终一致性)选择事件驱动架构配合Saga模式;4)介绍ABSD、DSSA等主流架构方法论及ISO/IEEE标准体系。文章融合金融与互联网领域的架构实践经验,为技术架构师提供系统性的知识框架和决策参考。

模界 | AI工程化实践者 185

聊聊 Activity 栈的亲和关系

launchMode <activity android:name=".ui.activity.TaskAffinityActivity" android:launchMode="singleTask" /> standard singleTop singleTask singleInstance 默认模式是 standard,这些模式分为两大类,standard 和 s...

jeanboy 1989

GitHub 国内加速完全指南(最新):镜像、代理与优化技巧

在国内使用 GitHub 时,经常遇到 clone 慢、打开仓库卡、GitHub Actions 不稳定 等问题。下面是整理好的 GitHub 国内镜像和加速方法大全,高效使用 GitHub。

moton2017的博客 1万+

18、Excel VBA编程:自定义函数创建与代码调试全攻略

本文详细介绍了Excel VBA中自定义函数的创建方法,以获取单元格注释为例演示了完整开发流程,并深入讲解了代码调试的重要性与核心工具。内容涵盖三种主要错误类型及其应对策略,系统介绍了调试工具栏、断点、逐行执行、Locals窗口、Immediate窗口等实用功能。通过综合案例展示了如何运用调试技术解决实际问题,并总结了提前规划、逐步测试、日志记录等最佳实践,帮助读者提升VBA编程效率与代码质量。

life6的博客 101

Android task和back stack详解五:任务亲和力及其它

处理任务亲和力 亲和力表明了一个activity"心仪"哪个任务.默认下,属于同一个应用的所有activitie之间具有相同的任务亲和力.所以,默认下,一个应用的所有activitie首选属于同一任务.然而,你可以修改一个activity的默认任务亲和力.定义于不同应用的Activitie...

chenqunan3231的博客 105

【SpringBoot 3.x 第57节】Spring Boot 3 启动快得不讲武德?揭秘 Spring AOT 编译引擎背后的真相!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1762

安卓四大组件 之 Activity 之 任务栈和回收栈(Tasks and Back Stack)

所有activity都属于任务栈;任务栈中包含着一系列activity,这些activity在任务栈中的排列顺序取决于用户打开它们的先后顺序——最先打开的位于栈底,后打开的依次向上罗列;任务栈可以移到后台并为其中的每一个activity保持其停止时的状态,目的是为了让用户在操作其他任务栈的同时不丢失他们曾经操作过的activity。

程序媛 2428

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android同一个应用app最近任务有多个Activity窗口

最近开发一个应用, 发现Activity跳转之后, 最近任务里面有两个窗口, 类似这样 照的不是很清楚, 大体就这样, 两个窗口分别是两个Activity, 属于同一应用的. 出现这样的原因是因为两个Activity不属于同一个Task, 区分标志是清单文件里的taskAffinity这个属性: taskAffinity表示当前activity具有亲和力的一个任务(翻译不是很准确,...

羽吉公 6642

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Activity manifist Android activity 清单文件配置介绍

activity可以配置如下 &lt;activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"]

Icarus_的学习笔记 907

Android学习之 Activity堆栈管理与控制

App程序中有很多Activity、你可以通俗的理解为把一个Activity看做是一个UI界面。在Andord系统中Activity是以堆栈的形式存在。堆栈中的根Activity就是应用程序的启动Activity。而堆栈中最上方的Activity则是当前运行的/用户正在操作的UI Activity。     也可以这样去理解:堆栈中保存的是Activity对象,如果一个应用中多次使用了一个Act

小吕丶Code阶区 1万+

Android task和back stack详解5任务亲和力及其它

处理任务亲和力 亲和力表明了一个activity"心仪"哪个任务.默认下,属于同一个应用的所有activitie之间具有相同的任务亲和力.所以,默认下,一个应用的所有activitie首选属于同一任务.然而,你可以修改一个activity的默认任务亲和力.定义于不同应用的Activitie可以具有相同的任务亲和力,或者同一应用中的activitie可以分配不同的任务亲和力. 你可以使用元素的t

肿菜的博客 533

Android应用程序模块详解(任务、启动模式、进程和线程、FLAG_ACTIVITY_NEW_TASK)...

本文转自http://developer.51cto.com/art/200906/127967.htm 有关FLAG_ACTIVITY_NEW_TASK的更详细讲解请参考http://www.cnblogs.com/xiaoQLu/archive/2012/07/17/2595294.html 本文向您介绍Android应用程序开发中的各个模块,包括任务、启动模式、进程和线程...

212

Android原理探究:Activity任务栈Task的简单探讨

案例 某天上班,小明正在调试前些日子开发的支付宝应用内支付功能。当他兴冲冲打开支付页面,不小心把APP切到后台,等返回APP时却发现支付界面莫名其妙消失了,又发现那个支付界面又偷偷跑到了隔壁支付宝APP那边。小明突然感觉背脊一凉,产品经理那阴冷冷的话仿佛音绕耳旁:搞定这个BUG,你只有两个小时。可是左猜又蒙想不起个所以然,这不对呀,小明的世界观开始出现裂隙;不行,得去请教老司机,错了,是求助老员

net_168的博客 1986

Android activity四种启动模式及Flag

android:launchMode启动模式是Activity启动时的模式,有两种设置方式: 在AndroidManifest.xml中的标签的android:launchMode属性设置 通过代码intent.addFlags(Intent.FLAG_ACTIVITY_*)来设置 TASK(任务栈)在理解activity启动模式前,我们需要有android的TASK(任务栈)的概念。 通常,我们

cchao1024 1084

Android 应用程序模块: 应用, 任务, 进程, 和线程

在大多数操作系统里,存在独立的一个1对1的可执行文件(如Windows里的exe文件), 它可以产生进程,并能和界面图标、应用进行用户交互。但在Android里,这是不固定的,理解将这些分散的部分如何进行组合是非常重要的。 由于Android这种可灵活变通的,在实现一个应用不同

大写的牛逼 1367

Android应用程序模块:应用、任务、进程和线程

在大多数操作系统里,存在独立的一个1对1的可执行文件(如Windows里的exe文件), 它可以产生进程,并能和界面图标、应用进行用户交互。但在Android里,这是不固定的,理解将这些分散的部分如何进行组合是非常重要的。由于Android这种可灵活变通的,在实现一个应用不同部分时你需要理解一些基础技术:一个android包 (简称 .apk ) ,里面包含应用程序的代码以及资源。这是一个应用发布,

JackChan 1302

Android task和back stack详解五:任务亲和力及其它 .

处理任务亲和力   亲和力表明了一个activity"心仪"哪个任务.默认下,属于同一个应用的所有activitie之间具有相同的任务亲和力.所以,默认下,一个应用的所有activitie首选属于同一任务.然而,你可以修改...

142
上一篇: 继续接上添加动画效果(类似360通话)
下一篇: 关于语言的前期绑定与后期绑定
羊羊爱代码
博客等级 码龄11年 8粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值