launchMode的应用场景
launchMode的应用场景
四种launchMode启动模式
standard模式
默认的启动模式。每次启动一个Activity,都会创建一个新的Activity实例放在Task栈顶。这个Task栈是启动新的Activity的Activity所在的Task栈。那么这时候就会有特殊的情况,如果是service或者Application启动的Activity,并没有Task栈,这时就需要我们通过addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)指定标记,创建一个新的Task。
app的大多数Activity皆采用这种启动模式。作为开发者,我们考虑到的就是用户在操作每个页面后,即使之间有重复的界面,按回退键也可以按照刚刚操作的顺序回退。
singleTop模式
这种模式存在两种情况:
- Task栈顶不是要启动的Activity实例,这时和standard模式没有区别
- Task栈顶是要启动的Activity实例,那么就会复用这个实例,并且回调该Activity的onNewIntent方法。由于不会创建Activity实例,所以不会回调其他方法。
比如说音乐软件的点击上一首下一首,通知详情页或者聊天界面,即通过点击通知栏消息进入Activity。可以避免有多次通知消息通过点击而产生较多Activity实例。增强Activity的复用性。
singleTask
这种模式有三种情况。
- Task栈中不存在要启动的Activity实例,这时和standard模式没有任何区别
- Task栈中存在要启动的Activity实例,且此实例在栈顶,这时和singleTop模式没有区别
- Task栈中存在要启动的Activity实例,且此实例不在栈顶。这时会移除此实例上的所有Activity实例,使此实例置于Task栈顶,并复用此实例,回调onNewIntent方法
也就是说这是一种栈内的单例模式。这种模式下还可以通过manifest文件中的taskAffinity属性来指定要加载的Task栈。
<activity
android:name=".activitys.MainActivity"
android:launchMode="singleTask"
android:taskAffinity="com.gl.task"/>
关于taskAffinity的值:每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就等于包名。
这种模式一般适用于软件的首页。
singleInstance模式
这种模式算是一种全局的单例模式,即只要有任何一个栈存在此Activity实例,就会复用此实例,回调onNewIntent方法。如果此实例不存在,那么就会创建新的Task栈,并放入Activity实例。
也就是说,这种模式下的Activity实例只有两种形式。
- 不存在此实例
- 存在此实例,且只在一个Task栈中并且该Task中只有该实例
这种模式一般应用于闹钟响铃界面、拨打接听电话界面等系统界面,确保此Activity实例只能存在一个。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfgjjfk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01