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中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后