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使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

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