当前位置: 主页 > 网络资讯 > 小程序

一起看看 Activity启动模式

发布时间:2020-12-10 17:10   浏览次数:次   作者:网络

小程序开发教程主要介绍了Activity启动模式的相关资料

一起看看 Activity启动模式

推荐(免费):小程序开发教程

前言

平常我们启动活动的时候就是直接startActivity或许并没有注意活动的启动模式,默认情况下都是以默认的启动模式启动。但启动模式有时候是比较重要的。例如一个活动你想他只启动一次不要有多个实例,那么你可能需要把他设置为singleTask模式。所以有必要了解一下这一些启动模式。同时要注意一下,启动模式≠启动方式,启动方式是指显示启动和隐式启动,不要混淆,显示启动和隐式启动后续我会有专门的文章讲解。

关于任务栈简介

要了解启动模式,首先要了解一下关于任务栈的概念。关于任务栈的实现原理等我在这里就先不说了,这里主要简单介绍一下什么是任务栈。我们启动的活动实例都会放在一个叫做任务栈的东西里面。我们都知道栈是“后进先出”的特点。打个比方,任务栈就是一个羽毛球筒,活动实例就是一个个羽毛球,后放进去的只能先拿出来。所以当我们启动一个app的时候,就会自动创建一个任务栈,然后我们就往里面丢活动实例。当我们按返回销毁活动的时候,这些活动就依次从任务栈里面出来。当然,一个app可以拥有多个任务栈,例如使用singleInstence启动的活动就是在一个独立的任务栈中。了解完任务栈的概念,接下来就可以来看看活动的四种启动模式。

解析Activity的四种启动模式

standard

这种是标准启动模式,默认就是这种启动模式。每次启动这种启动模式的活动的时候都会创建一个新的实例放入栈中,不管栈中是否已经存在相同的实例。这也是最容易理解的。

singleTop

顾名思义,栈顶是单一实例的。什么意思呢。假设你现在启动一个ActivityA,但是这个时候已经存在一个ActivityA实例在栈顶,那么这个时候,就不会创建新的实例。但是如果,在非栈顶存在相同的实例,还是会创建新的实例的。例如,现在栈中的活动是 ABC,A处于栈顶。然后此时启动A,是不会再创建一个A活动出来,而是执行A的onNewIntent方法;但是如果此时启动C活动,由于栈顶是A不是C,那么还是会创建一个新的C实例出来,此时的栈情况就是CABC。

singleTask

单一任务模式。这个模式的意思是,在该活动的启动栈中,只能存在单一实例,不管是否位于栈顶。与其他启动模式不同的是,这个启动模式可以指定栈去启动。例如现在有一个栈Main,但是你可以给活动A指定一个栈名dev,那么启动A的时候就会创建一个栈叫做dev。所以singleTask的意思就是,当你启动一个启动模式为singleTask的活动的时候,如果栈中没有相同的实例,那么就会创建一个新的实例放入栈中;如果指定栈中存在相同的实例,例如栈中有ABC,然后你启动B,那么这个时候不会去创建新的B实例,而是把B放到栈顶,并把A顶出去,再执行B的onNewIntent方法,此时栈的情况就是BC。
细心的读者会发现“顶出去”。是的,我们都知道栈是后进先出的特点,例如你往筒里放了3个羽毛球,那你想要拿到中间那个羽毛球,是不是只能先把上面那个抽出来呢,同样的道理,要想把B提到栈顶,那么必须把A顶出来。可能会有很多读者误以为启动后是BAC,但其实是BC,因为A得先出栈,B才能出来。同理,如果栈中是ADFBC,这个启动B,也是BC,上面的全部被出栈了。

singleInstance

单例模式。这个是singleTask的强化版本。他会自己新建一个栈并把这个新的实例放进去,而且这个栈只能放这个活动实例。所以当重复启动这个活动的时候,只要他存在,都是调用这个活动onNewIntent方法并切换到这个栈中,并不会去创建新的实例。

设置启动模式的两种方法

了解了活动的四种启动模式,接下来看看如何给他指定启动模式。

静态设置

静态设置就是在AndroidManifest中给具体活动设置启动模式。通过给活动指定launchMode参数来设置启动模式。例如:

 <activity></activity>


# 就会  # 创建一个  # 这个时候  # 切换到  # 当我们  # 四种  # 要了  # 都是  # 并把  # 到新  # 多个  # 才会  # 这两个  # 要注意  # 来看看  # 然后再  # 按下  # 会去  # 设置为  # 讲到 


相关栏目: 【 网站优化84359 】 【 站长学院75356 】 【 运营推广7218 】 【 小程序18188 】 【 运维技术36808 】 【 营销推广32536 】 【 SEO优化41416 】 【 百度推广27695 】 【 AI推广83940


相关推荐: 腾讯实时音视频TRTC  微信小程序 wx:key详细介绍  新人做微商要这样选产品才好卖  malloc函数的参数是什么  malloc函数动态分配一维数组  微信小程序 input输入框控件详解及实例(多种示例)  零基础微信小程序开发及实例详解  微信小程序 input 组件详细介绍  PHP 函数如何与 HTML 交互  浅谈怎么使用小程序实现一个变速大转盘  浅析网页与小程序间怎么进行通信  微信朋友圈怎么发文字  函数指针与函数对象的内存管理对比?  PHP 函数如何返回函数或对象  memset函数的应用场景  PHP 函数如何与 JSON 交互  C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息二  malloc函数的使用原理是什么  将 JSON 数据转储到 Django 模型:使用 Django 设置和命令  C++ 函数库和标准模板库之间的关系是什么?  如何使用 PHP 函数扩展优化代码效率?  C++ 函数的函数重载与函数模板有何区别?  golang框架性能优化中如何进行代码重构?  C++ 中不同类型参数传递是如何实现的?  网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法  小程序实战:实现一个简单小程序监控功能  PHP 函数命名中的前缀使用  C++ 函数指针和函数对象在游戏开发中的应用?  C++ 内置函数的拓展应用和自定义案例  微信小程序实例教程(一)  让微信小程序开发如鱼得水的方法  malloc函数的用法和功能能  微信小程序 图片边框解决方法  golang框架在高并发场景中的锁机制与并发控制  C++ 函数调用约定与栈帧管理:优化性能的技巧  微信小程序开发组件—导航  golang框架的安全性考虑:如何监控可疑活动?  函数指针与函数对象在 C++ 模板编程中的作用?  微信小程序 wx:key详细介绍  揭秘Golang框架的漏洞管理和修复方案  微信小程序怎么推广比较好  小程序开发需要的技术有哪些?  PHP:微信小程序 微信支付服务端集成实例详解  五种微信分销系统解决方案的原理  unordered_map默认值  C#微信开发(服务器配置)  malloc函数作用 malloc函数有什么用  React如何构建小程序?两种实现方案分享  malloc函数的实现原理  微信小程序 欢迎界面开发的实例详解