Android四种启动模式LanchMode

默认情况下,多次启动同一个 Activity 时,系统会创建多个实例并把它们一一放入任务栈中,当我们按 back 健时,这些 Activity 会一一回退。任务栈是一种“后进先出”的栈结构,即每按一下 back 健就会有一个 Activity 出栈,直到栈空为止,当栈中无任何 Activity 时,系统会回收这个任务栈。 四种启动模式:standard、singleTop、singleTask 和 singleInstance。下面介绍各种启动模式的含义及使用例子。

一、standard – 默认模式

standard:标准模式也是系统的默认模式。每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在。这种模式下,谁启动了这个 Activity,那么这个 Activity 就运行在启动它的那个 Activity 所在的栈中。如 Activity A 启动了 Activity B(B 是标准模式),那么 B 就会进入到 A 所在的栈中。

二、singleTop – 栈顶复用模式

singleTop 栈顶复用模式。如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时它的 onNewIntent 方法会被调用,通过此方法的参数可以取出当前请求的信息。需要注意的是,这个 Activity 的 onCreate、onStart 不会被系统重新调用,因为它并没有发生改变。如果新 Activity 的实例已经存在但不是位于栈顶,那么新 Activity 仍然会重建。 适合接收通知启动的内容显示页面,当收到多条新闻推送时,用于展示新闻的 Activity 设置成此模式,根据传来的 Intent 数据显示不同的新闻信息,不会启动多个 Activity。

三、singleTask – 栈内复用模式

singleTask:栈内复用模式。这是一种单实例模式,在这种模式下,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,复用时会将它上面的 Activity 全部出栈,同时它的 onNewIntent 方法会被调用。这个过程存在一个任务栈匹配,因为这个模式启动时会在自己需要的任务栈中寻找实例,这个任务栈通过 taskAffinity 属性指定,如果这个任务栈不存在,则会创建这个任务栈。 taskAffinity 标识了一个 Activity 所需的任务栈的名字,默认情况下,所有 Activity 所需的任务栈的名字为应用的包名。我们可以为每个 Activity 都单独指定 TaskAffinity 属性,这个属性必须不能和包名相同,否则就相当于没有指定。TaskAffinity 属性主要和 singleTask 启动模式或者 allowTaskReparenting 属性配对使用。另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中的 Activity 处于暂停状态,用户可以通过切换将后台任务栈再次调到前台。 适合作为程序入口点,例如浏览器的主界面,不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走 onNewIntent,并且会清空主界面上的其它页面

四、singleInstance – 单实例模式

singleInstance:单实例模式。该模式除了具备 singleTask 模式的所有特性外,该模式的 Activity 只能单独的位于一个任务栈中,具有全局唯一性,即整个系统中只有这一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例

更多Android知识点分享

============================================================================

  • 架构师筑基必备技能

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。由于篇幅原因,这里有一份完整学习笔记pdf如有需要,可以点击这里免费自取!

知识要点: 1、深入理解Java泛型 2、注解深入浅出 3、并发编程 4、数据传输与序列化 5、Java虚拟机原理 6、高效IO

image

  • 设计思想解读开源框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

知识要点: 1、热修复设计 2、插件化框架设计 3、组件化框架设计 4、图片加载框架 5、网络访问框架设计 6、RXJava响应式编程框架设计

image

  • 360°全方位性能调优

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

1、设计思想与代码质量优化 2、程序性能优化

  • 启动速度与执行效率优化

  • 布局检测与优化

  • 内存优化

  • 耗电优化

  • 网络传输与数据储存优化

  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git

  • 自动化构建系统Gradle

4、项目实战

  • 启动速度

  • 流畅度

  • 抖音在APK包大小资源优化的实践

  • 优酷响应式布局技术全解析

  • 网络优化

  • 手机淘宝双十一性能优化项目揭秘

  • 高德APP全链路源码依赖分析

  • 彻底干掉OOM的实战经验分享

  • 微信Android终端内存优化实践

image

  • Android框架体系架构

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
)]

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-xgEEBhfl-1714650848917)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值