activity 四种启动模式
2016-06-06 17:08
246 查看
Android的activity 有四种启动模式,这是一个跟task管理相关的概念。四种模式为:
standard
singleTop
singleTask
singleInstance
可以在AndroidManifest.xml配置activity的启动模式,like:
android:launchMode="singleTop".
每种启动模式说明:
standard: 标准启动模式,并不新建task,除非从home或launch启动。 启动acitivity时:
总是新建acitivity, 如果task中已经存在某个activity的实例,那么再次启动这个activity时,会重新创建新的实例,也就是一个task中允许有多个相同的activity实例,每个实例处理不同的intent.
singleTop: 以这种方式启动的activity 必须在task的顶端,并不新建task,除非从home或launch启动。 启动acitivity时:如果已有task 中没有该activity的实例,则新建一个实例.
如果task 中没有该activity的实例,则新建一个实例.
如果task的栈顶已经存在了一个这个activity的实例,则复用这个实例,只通过onNewInstent()发送新的intent.
如果task中存在一个该activity的实例,但是不在栈顶,则在顶端新建一个实例。行为与standard一样。可以创建多个
singleTask: 一个task中该activity的实例只能有一个。这个稍微复杂,可能新建task,也可能加入到已有的task中. 这与affinity task相关。 一个activity的默认affinity task是它的包名, 也可以在AndroidManifest.xml中指定affinity task name: android:taskAffinity="AffinitytaskName",
AffinitytaskName可以是某个应用的包名,那么你的activity会加入到该应用的task中, 也可以是自己命名的名字。
启动acitivity时:
如果系统中没有这个activity的affinity task, 创建一个新affinity task, 创建该activity的实例加入到新的task中。
如果已经有这个activity 的affinity task,但是没有该activity实例, 创建一个新的实例加入到该task栈顶。
如果已经有这个activity 的affinity task,并且该task中已经有该activity的实例, 退出该task中这个activity之上的全部activity, 然后复用该activity实例,发送new intent到该activity.
singleInstance:系统中有且只有一个这个activity实例,且单独在一个task中。总是在新的task中开启,再次启动时复用该activity实例,只是调用onNewIntent()传递新的intent.
standard
singleTop
singleTask
singleInstance
可以在AndroidManifest.xml配置activity的启动模式,like:
android:launchMode="singleTop".
每种启动模式说明:
standard: 标准启动模式,并不新建task,除非从home或launch启动。 启动acitivity时:
总是新建acitivity, 如果task中已经存在某个activity的实例,那么再次启动这个activity时,会重新创建新的实例,也就是一个task中允许有多个相同的activity实例,每个实例处理不同的intent.
singleTop: 以这种方式启动的activity 必须在task的顶端,并不新建task,除非从home或launch启动。 启动acitivity时:如果已有task 中没有该activity的实例,则新建一个实例.
如果task 中没有该activity的实例,则新建一个实例.
如果task的栈顶已经存在了一个这个activity的实例,则复用这个实例,只通过onNewInstent()发送新的intent.
如果task中存在一个该activity的实例,但是不在栈顶,则在顶端新建一个实例。行为与standard一样。可以创建多个
singleTask: 一个task中该activity的实例只能有一个。这个稍微复杂,可能新建task,也可能加入到已有的task中. 这与affinity task相关。 一个activity的默认affinity task是它的包名, 也可以在AndroidManifest.xml中指定affinity task name: android:taskAffinity="AffinitytaskName",
AffinitytaskName可以是某个应用的包名,那么你的activity会加入到该应用的task中, 也可以是自己命名的名字。
启动acitivity时:
如果系统中没有这个activity的affinity task, 创建一个新affinity task, 创建该activity的实例加入到新的task中。
如果已经有这个activity 的affinity task,但是没有该activity实例, 创建一个新的实例加入到该task栈顶。
如果已经有这个activity 的affinity task,并且该task中已经有该activity的实例, 退出该task中这个activity之上的全部activity, 然后复用该activity实例,发送new intent到该activity.
singleInstance:系统中有且只有一个这个activity实例,且单独在一个task中。总是在新的task中开启,再次启动时复用该activity实例,只是调用onNewIntent()传递新的intent.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories