Android 中Activity的4种launchMode (验证)

2024-06-15 15:32

本文主要是介绍Android 中Activity的4种launchMode (验证),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了深刻理解,遂写此文 亦作为个人的验证(分析不同启动模式下的Activity生命周期)
此文的学习建立于已学习: http://blog.csdn.net/androideveloper/article/details/10264167
Pre: 跳转顺序 均是有startActivity(intent) 实现 无finish()
1.standard 此处不说,省略的时候就是用种启动模式,在同一个栈里面生成新的实例
onCreate -> onStart ->......->onDestory() 

2.singleTop  如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例
情况一:(本身位于栈顶 时 ,再次启动该Activity)
按钮不不断地启动自己startActivity(new Intent(ModeMainActivity.this, ModeMainActivity.class));

未点击按钮:

点击按钮后(不断点击也是这样)
由此可以看出,当ModeMode 位于栈顶时再启动这Activity,是不会实例化一个Activity,而是直接执行onPause() ->onNewIntent()->onResume() 红色部分是后来补充
原来在开发文档上有这么一句:
This is called for activities that set launchMode to  "singleTop" i n their package, or if a client used theandroid. content.Intent.FLAG_ACTIVITY_SINGLE_TOP flag when calling startActivity(android.content.Intent) . In either case, when the activity is  re-launched(onCreate->onStart()) while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.
An activity will always be paused before receiving a new intent, so you can count on onResume() being called after this method.
Note that getIntent() still returns the original Intent. You can use setIntent(android.content.Intent) to update it to this new Intent.

小总结:需要 调用 onNewIntent()的情况是:你要调用Activity已经存在了,不管在哪个栈里面

情况二(本身不位于栈顶时,再次启动该Activity)
Activity跳转顺序ModeMode --> B --> ModeMode 

由红色部分可以看到,当ModeMode 不位于栈顶时再启动这Activity,是会重新实例化一个Activity
(已同一个不会调用实例的onNewIntent())


3.singleTask    如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
Activity跳转顺序ModeMode -->  ModeMode 



Activity跳转顺序ModeMode --> B --> ModeMode (大多数应用场景是这样的)
因此启动launchMode为singlTask的Activity 时,
OldActicity.onPause()->NewActivity.onNewIntent()->   NewActivity .onRestart()-> NewActivity .onStart()-> NewActivity. onResume()

4.singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

Activity跳转顺序ModeMode -->    ModeMode  (大多数极少应用场景是这样的)

Activity跳转顺序ModeMode --> B   -->   ModeMode  (大多数应用场景是这样的)
启动顺序
onNewIntent()->onReStart()->onStart() ->onResume();











这篇关于Android 中Activity的4种launchMode (验证)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级