安卓开发之Activity的4种启动模式
来源:互联网 发布:人工智能应用领域 编辑:程序博客网 时间:2024/06/13 17:54
一、四种启动模式
Activity的启动模式有4种,分别为standard、singleTop、singleTask、singleIntance。4种启动模式的区别主要与Activity的任务栈管理有关,栈是一种后进先出的集合。
二、Activity启动模式的设置
在AndroidManifest.xml中 ,注册Activity时可以设置Activity启动模式, android:launchMode=”” ,这个属性用于配置Activity的启动模式,属性缺省启动模式为standard。
示例
<activity android:name=".MainActivity" android:launchMode="standard" />
三、各个启动模式的区别
standard
这是Activity的标准启动模式,也是Activity的默认启动模式。在这种启动模式下的Activity可以被多次实例化,即在同一个任务栈中可以存在多个该Activity的实例。如果ActivityA的启动模式为standard,且已经有一个ActivityA实例被启动,在ActivityA中调用startActivity时会启动一个新的Activity实例,对系统性能的消耗过大。
singleTop
如果在任务栈的栈顶正好存在该Activity的实例, 就会重用位于栈顶的该实例,不会创建新的Activity对象,并且不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用该实例的onNewIntent()函数将Intent对象传递到这个实例中,否则就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
singleTask
在同一个Task内只能有一个Activity实例:
如果启动的目标Activity不存在Task任务栈中,系统将会创建一个目标Activity实例,并将它加入到Task栈顶
如果启动的目标Activity已存在Task任务栈的栈顶,就会重用位于栈顶的该实例,并且不会再调用通常情况下我们处理请求数据的onCreate方法,而会调用该实例的onNewIntent()函数将Intent对象传递到这个实例中。(同singleTop)
若果启动的目标Activity已存在但没有位于Task任务栈的栈顶,系统将会把任务栈中该目标Activity上面的所有Activity移除Task栈,使该Activity置于Task栈顶。
singleInstance
设置了singleInstance模式的Activity会在一个独立的任务中开启,并且在这个任务中有且只有这一个实例。当再次启动该Activity实例时,会重用已存在的任务和实例,并且会调用该实例的onNewIntent()函数来接收Intent。类似浏览器工作原理,不管多少应用要启动该Activity,这个Activity有且只有一个。
总结:
standard:标准模式,系统的默认模式singleTop:栈顶复用模式,Activity如果在栈顶就不会被重新创建singleTask:栈内复用模式,Activity如果在某个栈中存在就不会被重新创建singleInstance:单实例模式,是加强版的singleTask,当实例创建后,系统会建一个新的任务栈(独立存在)
- 安卓开发之Activity的4种启动模式
- 安卓开发42:lauchMode Activity的启动模式
- 安卓activity的启动模式
- 安卓之旅第六站--Activity的四种启动模式
- 安卓Activity启动的四种模式
- 安卓进阶-Activity的四种启动模式
- 安卓Activity的四种启动模式
- 安卓学习笔记之获取Activity的返回值以及Activity的启动模式
- 安卓Activity启动模式
- 安卓Activity启动模式
- 安卓Activity启动模式
- Android开发之Activity的启动模式
- Android开发之Activity的启动模式
- 安卓开发学习心得-------Activity生命周期以及启动模式
- Android开发入门之Activity的四种启动模式
- Android开发之Activity四种启动模式的介绍
- Android开发之--activity的几种启动模式
- 【安卓开发-3】Activity的四种启动模式、Intent的显式和隐式使用方式
- 【USACO FEB 2010 SILVER】吃巧克力(Chocolate Eating)
- Android之AsyncTask异步加载(二)
- 设计模式C++实现(10)——桥接模式
- Glide详解
- Base64编码的学习整理--网站开发中的应用
- 安卓开发之Activity的4种启动模式
- 设计模式C++实现(11)——装饰模式
- javascript时间差插件
- Sketch插件介绍
- 那些不加班的开发团队,都看透了持续集成的四大好处
- String比较 ==和equals的区别
- 设计模式C++实现(12)——备忘录模式
- nginx + tomcat 导致session丢失的问题
- MANIFEST.MF错误