Android 任务栈、Intent.FlAG_ACTIVITY_xxx、Activity四种启动模式
来源:互联网 发布:js 延迟1s 编辑:程序博客网 时间:2024/06/06 20:34
官网地址:http://developer.android.com/guide/components/tasks-and-back-stack.html
任务栈:
> 从主屏幕上点选一个app图标,进入一个app内部;那么即开始了一个task stack。
> 默认情况下,start的activity,都在同一个task stack。
后退栈:
> 从activity-A 跳转到 activity-B,且并没有finish A;
这时A就在back stack中,栈顶就是B
> 后进先出
总结各种活动(activity)和任务(task)的默认行为:
> 当活动A开始活动B,活动A被停止,但系统保持其状态(如滚动位置并输入到表单文本)。
在活动B,如果用户按下后退按钮,活动A恢复其状态的恢复。
> 当用户通过按home键时,当前活动停止,此前的任务进入后台。系统保留之前任务的各活动的状态。
如果用户稍后通过选择开始该任务的启动器图标恢复的任务,则恢复该任务栈顶的活动
> 如果用户按下后退按钮,当前的活动是从堆栈中弹出并销毁。在堆栈上一个活动重新开始。
当一个活动被破坏,系统 不会保留该活动的状态。
活动可以被实例化多次,即使从其他任务启动。(所谓其他任务可能是当前app进程,也可能是其他app进程)
管理任务
默认情况下,任务里的Activity就是后进先出的
然而,你可能会决定要中断正常的行为。
也许你想在你的应用的活动启动时(而不是放在当前的任务范围内),开始一个新的任务;
或者,当你开始一个活动,你要提出它的一个现有实例(而不是在后面堆栈的顶部创建一个新的实例);
或者,你希望你的back栈的所有活动,当用户离开时,除任务栈中的root activity外都将被清除。
那么要实现这些乃至更多:可以在manifest中<activity>添加元素,或在startActivity时,传递一些Intent的Flag
清单元素
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
详见这里
Intent的Flag
> FLAG_ACTIVITY_NEW_TASK
功能同launchMode: singleTask 相同。(可以用getTaskId()可看当前任务id)> FLAG_ACTIVITY_CLEAR_TOP
清除当前Activity之上的所有Activity。比如现在依次打开了4个Activity,A、B、C、D,这时,想从D跳到B,那么在B中,再按back键,应该跳到A,那么C与D就是要清除的了。
Intent intent = new Intent(this, B.class);
Intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
如此,打开B时,C与D就被清除了
> FLAG_ACTIVITY_SINGLE_TOP
> FLAG_ACTIVITY_REORDER_TO_FRONT
launchMode:
> standard(默认模式)
多次startActivity,会创建多个实例。一个task stack可以有多个实例;每个实例可以属于不同的task stack
> singleTop
与 Intent.FLAG_ACTIVITY_SINGLE_TOP 功能相同
> singleTask
同一任务栈中,该标识的Acitivty实例只能有一个。(该栈中可以有其他Activity实例)
当start一个该标识的Activity时,会将其之上的其他Activity(如果有)都弹出,
如果实例已经存在,再次打开,会调用onNewIntent()
> singleInstance
- Android 任务栈、Intent.FlAG_ACTIVITY_xxx、Activity四种启动模式
- Android Activity:四种启动模式,Intent Flags和任务栈
- Android Activity:四种启动模式,Intent Flags和任务栈
- Android Activity:四种启动模式,Intent Flags和任务栈
- android任务栈及activity四种启动模式
- Android中Activity的四种启动模式以及用Intent启动Activity的模式
- Android activity任务栈和四中启动模式
- Activity的启动, android 任务栈及启动模式 ,Intent的用法
- Activity的四种启动模式 任务栈
- Activity的四种启动模式任务栈图解
- Android中任务栈和activity的四种启动模式
- Activity启动模式,任务栈,回退栈,Intent再续
- Activity的启动模式,任务栈Task,intent的Flags
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags()
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();
- Activity四种启动模式 及 Intent Flags 与 栈 的关联分析
- Android入门:Activity四种启动模式
- Android Activity 四种启动模式
- spring事务传播属性和隔离级别
- 数据结构--单链表
- Xamarin.Android 如何使用圆形Image
- usaco 1.2 complete search
- spring(JDBC)事务配置
- Android 任务栈、Intent.FlAG_ACTIVITY_xxx、Activity四种启动模式
- SpringBoot定时任务说明
- 复杂可变数组的排序---(数组中存的是对象)---mutablearray
- Could not build module 'UIKit'问题
- hdu3585 maximum shortest distance
- mongodb学习笔记
- 自定义Dialog时,会遇到dialog wrap_content,这个时候需要手动设置Dialog大小
- 1、字符串的操作
- debian 发行代号