2、Activity启动模式

本文深入解析了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,并通过具体示例阐述了它们的工作原理及注意事项,特别是针对singleTask模式下的任务栈管理和TaskAffinity属性的应用。

Activity 启动模式,熟知的就是 standard、singleTop、singleTask、singleInstance

注意点:

任务栈 -- 所有Activity继承Application 的任务栈名称,即包名。

只有 singleTask 启动模式的Activity 单独设置任务栈名称有意义。

任务栈名称不可与包名一致,设置方式为在清单文件。

android:taskAffinity="com.yanlong.task1"

1、standard 启动模式,谁加载我,我进入谁的任务栈;

2、ApplicationContext 启动 standard 模式的Activity 报错,因为 非Activity类型的Context 无所谓 任务栈。解决方法,给待启动Activity指定 FLAG_ACTIVITY_NEW_TASK

Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
3、singleTop:如果启动的新AC已经属于栈顶,那么会调用 onNewIntent。

4、singleTask:如果存在,多次启动,调用onNewIntent。

重要:singleTask 启动方式 --- 先检查是否有所需 任务栈,再检查是否有所需实例。

举例:

任务栈名称 默认包名     如  com.yanlong.myapplication

任务栈名称 自定义栈名  如  com.yanlong.task

A:MainActivity     任务栈名称 默认包名,默认打开 standard

B:SecondActivity  任务栈名称 默认包名,打开方式 standard

C:ThreadActivity   任务栈名称 自定义栈名,打开方式 singleTask

D:FourActivity       任务栈名称 自定义栈名,打开方式 singleTask

启动流程  A->B->C->D->B

A启动B,由于B是 standard,那么B直接进入 默认包名栈

B启动C,由于C是 singleTask,那么C先查找 自定义栈名,没有找到,那么先创建 自定义栈名,然后创建C实例,压入自定义栈名任务栈

C启动D,由于自定义栈名已经存在,然后查找该栈名内是否有 D实例,没有找到,那么创建D实例,压入自定义栈名任务栈

D启动B,由于B是 standard,那么B直接进入 自定义栈名任务栈

所以最后结果

默认栈内:A B

自定义栈内:C D B


TaskAffinity属性主要和singleTask启动模式或者 allowTaskReparenting属性配对使用,在其他情况下没有意义。另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中的Activity位于暂停状态,用户可以通过 切换将后台任务栈再次调到前台。

这里前台任务栈 后台任务栈不是很明朗,根据书中所写,我个人见解是,当前显示的 Activity所在的栈区是前台任务栈,其他的任务栈都是后台任务栈。希望有了解的留言纠正。

重点:

当TaskAffinity和allowTaskReparenting结合的时候,会产生特殊效果

应用 M,应用 N

N中 Activity N-A,属性 allowTaskReparenting 为 true

M 启动了 N-A。然后按Home回到桌面,单击N的桌面图标,显示界面不是 N的MainActivity 而是 N-A

解释:

M 启动了 N-A,这时候 N-A 只能运行在 M的任务栈中,但是N-A属于N应用,正常情况下,他的TaskAffinity值肯定和M不同,因为包名不同。所以当N启动时,N会创建自己的任务栈,这时候系统发现 N-A原本想要的任务栈被创建了,所以就把N-A从M的任务栈 转移了过来。



内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值