android学习笔记----启动模式与任务栈(Task)
发布日期:2021-06-30 19:56:23 浏览次数:2 分类:技术文章

本文共 1834 字,大约阅读时间需要 6 分钟。

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

 

Activity启动模式与任务栈(Task)全面深入记录(上):

Activity启动模式与任务栈(Task)全面深入记录(下):

 

然后记住

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在一个任务栈。

关于基本用例分析见这里

情景二:

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

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

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

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

如下:

...
...

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

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

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

官方文档:

 

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

 

转载地址:https://liuchenyang0515.blog.csdn.net/article/details/85166201 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android学习笔记----关于findViewById那些事
下一篇:二叉搜索树转化成双向链表

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月26日 06时02分56秒