activity启动模式(1、standard,singleTop,singleTask,singleInstance)

本文主要是介绍activity启动模式(1、standard,singleTop,singleTask,singleInstance),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

activity启动模式:(配置android:launchMode="")
1、standard(标准模式,每次启动activity都会创建一个新的activity实例)
2、singleTop(可以有多个实例,但是不允许activity的多个实例叠加,即:如果有activity的实例 在栈顶的时候,启动这个activity,不会创建新的实例,而会调用其onNewIntent()方法,如果不在栈顶则创建新的实例)
toast.makeText().show()//让文本显示一段时间后消失,相当于c#中的tooltip或者具有存活时间的messageBox
3、singleTask(在栈中只能有一个实例,在同一个应用程序中启动它的时候,若不存在此activity实例,则会在当前栈中创建,若存在,则会把栈中在其之上的其他activity实例销毁掉,并调用此实例的onNewIntent()方法。)

4、singleInstance(只有一个实例,并且这个实例独立运行在一个activity任务栈中,即单独存在于一个栈中,这个任务栈中只有这个实例,不允许有别的activity存在)


Task概念:

task是一个具有栈结构的容器,可以放置多个activity实例

启动一个应用,系统就会为之创建一个task,来放置根activity

一个activity启动另一个activity时,两个activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前

taskAffinity:(task亲和力的意思)

指出了activity希望进入的task

如果一个activity没有显示的指明该activity的taskAffinity,那么它的这个属性就等于application指明的taskAffinity

如果application也没有指明,那么该taskAffinity的值就等于包名

task也有自己的affinity属性,它的值等于它的根activity的taskAffinity的值


intentFlag:

1,FLAG_ACTIVITY_NEW_TASK:

    系统会寻找或创建一个新的task来放置目标activity,寻找时依据目标activity的taskAffinity属性来进行匹配,如果找到一个task的taskAffinity与之相同,就将目标activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标activity的taskAffinity,将目标activity放置于此task

2,FLAG_ACTIVITY_SINGLE_TOP:

    当task中存在目标activity实例并且位于栈的顶端时,不在创建一个新的,直接利用这个实例

3,FLAG_ACTIVITY_CLEAR_TOP:

    如果要激活的那个activity在任务栈中存在该实例,则不需要创建,只需要把该activity之上的activity实例都出栈

4,FLAG_ACTIVITY_REORDER_TO_FRONT:

    如果栈中已经存在,则将它拿到栈顶,不会启动新的activity(重新给task中的activity排序)



这篇关于activity启动模式(1、standard,singleTop,singleTask,singleInstance)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072389

相关文章

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin