Activity启动模式(一)之singleTask+finish()退出应用程序

地下水热耦合模拟FEFLOW建模 2.3 依据讲解内容,练习构建地下水数值模型(例二),学会各种源汇项、边界条件、时间序列、节点参数的添加及模拟结果的导出。对于真实模型,学习如何建立概念模型、数学模型,练习模型的各种参数和源汇项输入,进行溶质运移、水热模拟。3.通过多种实践案例应用,掌握实践工作中常见项目的模型搭建及特殊问题处理方法。4.1学习水热模型抽灌模式,网格剖分、边界条件、初始温度场赋值。3.3练习模型的各种参数和源汇项输入,进行水流和溶质运移模拟。2.掌握水热耦合的模拟方法及典型项目应用问题处理。2.4根据模拟结果, 阅读详情

开个头

在一篇公众号中看到了,优雅退出anroid应用程序的方法,优雅地退出应用。
其中提到了一种用SingleTask+finish()的方法退出android应用。我们来简单的看一下。

简单分析四种启动模式

standard

标准模式:也是默认的启动模式,就是每次启动该Activity的时候,都会重新创建该Activity的实例,并不会考虑当前activity栈里面是否有该Activity的实例,而是直接压栈。

singleTop

栈顶复用模式:就是启动一个Activity的时候,如果栈顶有该Activity的实例,就不会新创建实例,而是复用这个已经存在的实例。如果栈里没有Activity的实例,或者有实例但是不在栈顶,都会重新创建该Activity的实例并且压栈。

需要注意的是如果复用了实例,会回调一个onNewIntent()的方法。

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        mFragments.noteStateNotSaved();
    }
singleTask

栈内复用模式:和singleTop类似,不同的地方是,他是判断栈内是否存在该Activity的实例,而且,一旦栈内存在实例,他会直接将该实例之上所有的activity出栈,也就是都finish()掉,把该实例置于栈顶。如果不存在实例,那么才会重新创建该Activity的新实例,并且压栈。
和singleTop一样,如果复用了实例,会调用onNewIntent()方法

singleInstance

单一实例模式:整个手机系统中只有该Activity的一个实例。并且该实例单独存在一个activity栈中。

优雅退出应用

我们先假定一种需求,就是打开应用后,点击进入一个设置界面,在设置界面点击一个退出按钮,整个应用退出。
这里写图片描述

步骤分析:
启动程序,启动MainActivity界面,MainActivity实例被压栈。

点击跳转按钮,跳转到SettingActivity界面,并且通过Intent传递了一个boolean类型的参数”isExit”,SettingActivity实例被压栈。注意,跳转的时候没有调用MainActivity的finish()方法,所以,此时栈底到栈顶的顺序为MainActivity –>SettingActivity

点击退出按钮,跳转到MainActivity界面,由于MainActivity的launcher为singleTask,所以会回调onNewIntent方法,接收intent值,收到SettingActivity传来的boolean值”isExit”为true,调用MainActivity的finish()方法,并且会把activity栈里的MainActivity实例之上的所有Activity弹出栈,也就是SettingActivity被finish()掉。最后整个应用退出。
log分析:
这里写图片描述
intent分析
这里有个要注意的地方就是intent这个东西。在onNewIntent(intent)这个方法里收到的intent是最新的intent,而直接通过getIntent()方法获取的intent是启动应用时 启动MainActivity的intent。必须通过setIntent(intent)方法之后,才可以通过getIntent()方法获取最新的intent值。
这里写图片描述

以上只是对singleTask这种模式做了简单的分析,要注意的点就是。
如果栈里有该Activity的实例,那么跳转的时候:
1、会复用栈里的activity的实例,会调用onNewIntent方法,接收intent值
2、先调用onNewIntent(),然后才会调用onResume()。上面的例子,没有调用onResume是因为直接在onNewIntent()里面调用了finish(),所以还没来得onResume()界面就没了。也正因为这个原因,所以才并没有出现界面先跳到MainActivity然后再退出,而造成的视觉闪退的情况。
3、把栈内该activity实例之上的所有实例 都弹出栈也就是finish()掉。
4、singleTask启动模式,并没有对应的ACTION_FLAG与之对应,所以不能通过Intnent.setFlag
的方法设置,只能通过在清单文件设置android:launchMode的方法设置。
5、必须先setIntent(intent)之后,才能用getIntent()方法获取最新的intent值。

其实singleTask还有其他的用法,之后再分析。
manifest文件

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".SettingActivity" />

MainActivity:

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //跳转到SettingActivity界面
    public void jumpToSetting(View view) {
        Intent intent = new Intent(this, SettingActivity.class);
        startActivity(intent);
    }


    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.e(this.toString(), "----------------------------------onNewIntent---------------------------------");

        Intent intentBefore = getIntent();
        boolean isExitBefore = intentBefore.getBooleanExtra("isExit", false);

        setIntent(intent);

        Intent intentAfter = getIntent();
        boolean isExiAfter = intentAfter.getBooleanExtra("isExit", false);

        detailIntent(intent);
    }

    private void detailIntent(Intent intent) {
        if (intent != null) {
            boolean isExit = intent.getBooleanExtra("isExit", false);
            Log.e("dealIntent", "isExit = " + isExit);
            if (isExit) {
                finish();
            }
        }
    }
}

SettingActivity:

public class SettingActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
    }

    //跳转到MainActivity
    public void exit(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("isExit", true);
        startActivity(intent);
    }
}
常学常新:《Attention Is All You Need》万字解读! 阅读详情

相关推荐

【视线追踪】视线追踪的性能评估框架 及 基础知识

文章目录一、 前言二、 眼球追踪基础1. 眼动类型研究2. 基本设备3. 校准 calibration4. 眼球视线和头部姿态的关系5. 视线追踪精确度的评估三、 视线估计算法1. 基于2维回归2. 基于3D模型1) 单摄像头2) 多摄像头3. 基于交叉比4. 基于外观5. 基于眼睛形状的方法四、 实现估计的应用1. 电脑2. 电视3. 头戴设备4. 汽车5. 手持设备6. 设备配置五、 视线追踪的性能指标和错误原因1. 不同平台之间差异性很大2. 影响视线追踪可用性的因素六、 视线追踪系统的性能评估框架1

火火的博客 5317

android 解决APP退出后以及后台运行时,再次点击图标的运行问题

需求:现有闪屏界面SplashActivity,要求在无后台运行APP的情况下,点开应用,首先出现闪屏,2秒过后,进入到主功能界面MianActivity,运行时,将APP关至后台,再次点击图标,返回到当初退出时的界面。 SplashActivity: public class SplashActivity extends AppCompatActivity { private Handl...

qq_39994562的博客 1643

MuJoCo 关节角速度记录与可视化,监控机械臂运动状态

1. 手动计算关节速度,其中timestep为仿真步长。2. 使用data.qvel直接取得关节速度。

darcsdn 768

Android finishOnTaskLaunch 属性

Android finishOnTaskLaunch 属性 [复制链接] 这个属性与clearTaskOnLaunch 属性相似,但它仅作用于单个的activity,而不是整个的task。 而且它可以使任意activity 都被清理,甚至根activity 也不例外。当它设置为“true”的时候,此activity 仅做为任务的一部分存在于当前回话中,一旦用户离开并再次回到这个任

autumn20080101的专栏 3618

WebRTC音频传输实战:从采集到播放的完整链路解析(附RTP包处理细节)

本文深入解析了WebRTC音频传输的完整链路,从麦克风采集、音频处理与编码,到RTP打包、网络发送,再到接收端的NetEQ抗抖动处理与最终播放。文章以Linux PulseAudio为例,详细剖析了线程模型、缓冲区管理及RTP包处理等关键细节,旨在帮助开发者优化实时音频应用的延迟、卡顿与回声问题。

tea88的博客 853

YOLOv8【第十二章:数据增强与数据工程篇·第10节】主动学习(Active Learning):如何挑选最有价值的样本进行标注!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 509

Android 笔记之 clearTaskOnLaunch&finishOnTaskLaunch

看了关于如题中的两条activity的属性,网上的介绍和例子说法不是十分清楚。遂测试记录之~~~~测试程序包括三个类,one.two.three~ one有button跳至two...two有button跳至three... root activity:one sub activity:two.three 情况1:在one activity 的配置属性中添加android:clearTaskOnL

u011347407的专栏 580

手把手教你学 NPU 驱动开发--第一部分:基础准备 开发环境搭建:Linux 内核编译与 NPU 仿真平台配置

摘要:本文详细介绍了搭建Linux内核编译与NPU仿真平台的完整流程。主要内容包括:1) 准备ARM64交叉编译工具链;2) 编译支持KGDB调试的Linux内核;3) 构建最小根文件系统;4) 使用QEMU模拟自定义NPU设备;5) 配置KGDB调试环境。文章重点讲解了如何通过修改设备树添加虚拟NPU设备,并提供了开源NPUIP Gemmini作为实验对象。最后展示了简单的"Hello NPU"驱动验证方法,为后续NPU驱动开发奠定了基础。文中还附有常用命令速查表,方便开发者快速搭建调

MHD0815的博客 384

Android 跳转到下个Activity并将当前Activity从栈中移除

利用的是Activity的生命周期实现。          @Override protected void onPause() { super.onPause(); getActivity().finish(); } 直接调用 finish() Activity依然在栈内,返回仍旧会回去(可以同activity的启动模式配合使用)。 启动模式有4

zkszk的博客 6017

7、RNA 二级结构预测:包含接吻发夹基序的新策略

本文提出三种用于预测RNA二级结构中接吻发夹基序的新策略,结合规范化规则与非歧义动态规划,分别在时间与空间复杂度之间进行权衡。策略A以O(n⁴)时间和O(n²)空间实现高效预测;策略B通过存储次优结果扩大搜索空间,空间复杂度升至O(n³);策略C全面探索组合可能,时间复杂度为O(n⁵),但保持O(n²)空间。实验表明不同策略适用于不同复杂度的序列,为RNA结构预测提供了灵活且可扩展的解决方案。

j7k8l的博客 133

最小二乘(MLS)求点云法向量

MLS算法的基本思想是通过在点云的局部邻域内拟合一个光滑曲面,如平面或多项式曲面,以此来重建和处理点云数据。对于法向量估计,MLS通常在每个点的邻域内拟合局部平面,然后从该平面的法向量作为点的法向量。

twnkie的博客 744

Android退出finishAll关闭所有Activity

Android退出finishAll关闭所有Activity

Jushuzhan的专栏 1063

基于深度学习的柑橘病害检测系统——YOLOv8 + UI界面 + 数据集

深度学习是机器学习的一种重要分支,它通过构建多层的神经网络(尤其是卷积神经网络CNN)来从大规模的数据中学习特征。近年来,深度学习特别是在计算机视觉领域取得了显著的进展,成为图像分类、目标检测、图像分割等任务的主要技术。对于农业病害检测问题,深度学习通过对大量带标签的病害图像进行训练,能够自动识别不同类型的病害,并判断病害的程度。通过图像中目标(病害区域)的边界框,可以快速定位病害区域,进一步分析其影响范围。

YOLO 1044

android中安全退出APP

转载地址:https://blog.youkuaiyun.com/csdn_mm/article/details/80620265 基于Activity的启动模式singleTask模式实现 singleTask是Activity启动模式中的一种,当startActivity时,它先会在当前栈中查询是否存在Activity的实例,如果存在,则将其置于栈顶,并将其之上的所有Activity移出栈。同时调用Act...

LTLTLT_的博客 728

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android利用activity启动模式退出整个应用

关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 前面我们来先看一下目前网上提供的几种方案: 1.退出单个activity 1)、获取当前进程的id,杀死该进程。android.os.Process.killProcess(android.os.Process.myPid()) 2)、终止当前正在运行的Java虚

234

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Activity的LaunchMode和退出应用程序

1.Activity的启动模式     Standard(默认-标准模式)         自己可以启动自己(会创新一个新的Activity)     SingleTop(顶单例模式)         在栈顶只允许有一个相同的Activity         自己不能启动自己     SingleTask(内单例模式)         如果要启动的Activity存在,则干掉要启

XHui_Lin的博客 465

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

activity finish后没有destroy_Activity 基础知识点

Activity 的生命周期典型情况下的生命周期典型情况下的生命周期,指的是在有用户参与的情况下,Activity 所经历的生命周期的改变。// Activity第一次启动 onCreate -> onStart -> onResume // 被新的Activity覆盖或者Home键返回桌面 // 新的Activity主题透明或者对话框样式,只会调用onPause onPause -...

weixin_39579127的博客 889

(原创)Activity启动模式之singleTask

android中activity有四种启动模式 standard(默认):在同一个任务栈中可以有重复的activity,基本没什么限制 singleTop:只有当此activity在栈顶时,去创建它,不会有新的activity生成,而是调用onNewInstance()方法 singleTask:在栈中只有一个activity实例,回调onNewInstance(),会把它之上的a...

amd80906的博客 187

Activity的模式,退出应用程序

1.Activity的四种模式:        运用launchMode();选择模式。          standard:标准模式。自己可调用自己的Activity。          singleTop:顶单例模式。不可以直接调用自己,通过间接的方式获取Activtity。两个一样Activity          但地址不同。          singleTask:内单例模式。

言叶水吉的博客 296

当执行了finish()之后,该activity又执行了oncreate(),再finish()才退出。

考虑androidmainfest.xml中该activity的启动模式,如果是singleTop,考虑改为singeTask再试一下。

WQcoder的博客 3908

Activity

1.Activty A B间切换,生命周期的7个方法 执行A.startAvtivity(B),A.finish() 代码响应执行顺序:A.onPause(),B.onCreate(),B.onStart(),B.onResume(),A.onStop(),A.onDestroy().   执行A.startAvtivity(B) 代码响应执行顺序:A.onPause(),B.onCreat

1795

【android】Activity启动模式

目录 Activity的启动模式 任务栈 TaskAffinity:任务相关性。 allowTaskReparenting的使用 activity需要启动模式的原因 activity的四个启动模式 1. standard:标准模式,系统的默认模式 2. singleTop:栈顶复用模式 3. singleTask:栈内复用模式 4. singleInstance:单实例模式 ...

a594218234的博客 260

双击返回结束、退出所有activity

双击返回结束 public long keybackTime = 0; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (Math.abs(System.currentTimeMillis() - ...

Max00000010的博客 452

android退出程序的代码,Android实现完全退出应用程序的代码

退出方法:1)使用singleTask加载模式2)定义一个基类,做公共的功能定义一个Application退出形式:1)菜单->退出2)按back键,提示再按一次退出3)按back,弹出退出提示对话框4)按back直接退出以下是第一种方法,通过在清单中配置activity的加载模式singleTask使用singletask栈中单实例例子:a启动b,b启动c,在c的menu菜...

weixin_39856709的博客 3960

Activity启动模式的一些点

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

lclfeng的博客 442

android 安全退出app,android中安全退出APP

转载地址:https://blog.youkuaiyun.com/csdn_mm/article/details/80620265基于Activity的启动模式singleTask模式实现singleTask是Activity启动模式中的一种,当startActivity时,它先会在当前栈中查询是否存在Activity的实例,如果存在,则将其置于栈顶,并将其之上的所有Activity移出栈。同时调用Activ...

weixin_39859988的博客 225
上一篇: Android使用版本控制时应该忽略的文件
下一篇: 使用adb查看任务栈
Come丶On
博客等级 码龄11年 18粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值