基础篇(三) Activity和任务栈(Task)

本文深入探讨了Android Activity的Task属性(如alwaysRetainTaskState、clearTaskOnLaunch、allowTaskReparenting、finishOnTaskLaunch)以及Intent的Flags属性(如FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_SINGLE_TOP、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_RESET_TASK_IF_NEEDED、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)在控制Activity在Task中的行为方式上的作用。通过解析这些配置选项,开发者能够更灵活地管理应用程序的任务栈结构。

Activity和Task都有taskAffinity属性:

  1.Activity默认值是Manifest中的包名,也可以在<application>标签下用android:taskAffinity来自定义。

  2.Task的taskAffinity和根Activity的taskAffinity相同。


Activity在Task中入栈、出栈、重用、重定任务栈,这些操作除了取决于Activity的lauchMode属性,还有Activity的Task属性、Intent的Flags属性。


一、Activity的Task属性:

1.android:alwaysRetainTaskState

 根Activity属性值为true  :Task始终保持原有状态。

 根Activity属性值为false:当前Task退到后台很长时间又回到前台,只保留根Activity,其他Activity实例可能全部出栈。

2.android;clearTaskOnLaunch

  根Activity属性值为true :Task退到后台,又回到前台,只保留根Activity,其他Activity实例全部出栈。

  根Activity属性值为false:Task可能保持原有状态。

3.android:allowTaskReparenting

  Activity属性值为true:当前Task退到后台,又回到前台,Activity实例出栈,可以移动到有相同taskAffinity的Task中。

4.android:finishOnTaskLaunch

  Activity属性值为true:当前Task退到后台,又回到前台,Activity实例出栈,不能移动到有相同taskAffinity的Task中。


二、Intent的Flags属性:

1.默认值

  Activity实例压入当前Task。

2.FLAG_ACTIVITY_NEW_TASK

  能找到taskAffinity相同的Task,就入栈;找不到,就新建Task,然后入栈。

3.FLAG_ACTIVITY_SINGLE_TOP   (singleTop)

  如果栈顶存在此Activity实例,就重用。

4.FLAG_ACTIVITY_CLEAR_TOP    (singleTask)

  如果栈内存在此Activity实例,就重用。

5.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

  从主菜单启动应用,含有此属性;长按home键,从最近记录启动应用,不含此属性。

6.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

  如果启动应用时含有 属性5 ,以含有此属性的Intent为分界点,弹出此分界点以上的全部Acticity实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值