Android中如何安全退出多个Activity
Android中如何安全退出多个Activity
这篇文章主要介绍“Android中如何安全退出多个Activity”,在日常操作中,相信很多人在Android中如何安全退出多个Activity问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android中如何安全退出多个Activity”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
实现步骤:
1:创建一个“空”的辅助Activity,在其onCreate方法中调用finish方法。如下:
publicclassLastActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);finish();}}
2:点击“退出App”的按钮执行以下方法:
findViewById(R.id.quit).setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(SecondActivity.this,LastActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);SecondActivity.this.startActivity(intent);finish();}});
通过这两个步骤可以实现退出整个应用。下面做一个简单地分析:
测试中使用三个Activity,其执行顺序为MainActivity -> SecondActivity -> LastActivity,在SecondActivity中,我们期望点击“退出app”按钮来实现完全退出App的功能,此时我们将借助一个辅助Activity(LastActivity)。
首先在触发点击事件后,在onClick方法中执行启动LastActivity操作。在执行点击事件前我们先查看任务栈中运行着的Activity,可以通过如下的命令查看:
adb shell dumpsys activity
其结果如下:
此时我们可以知道MainActivity跟SecondActivity属于同一个任务栈,且启动顺序为MainActivity -> SecondActivity。在onClick方法中我们准备启动LastActivity的时候,其Flag被设置为Intent.FLAG_ACTIVITY_CLEAR_TASK,该flag在android 文档中的表述为“If set in an Intent passed to Context.startActivity(), this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started.”,其表达的意思为在启动新的Activity的时候,将清理跟此Activity“相关”的任务栈,此时除了栈中本身的Activity(SecondActivity)都将被清理,然后再启动Activity(LastActivity)。下面来验证其是否正确,在LastActivity的onCreate调用finish前加上断点,然后点击“退出App”按钮,查看任务栈的信息如下:
此时我们可以看出,在LastActivity被启动后,MainActivity被清理了,此时任务栈中只剩下LastActivity跟SecondActivity。接着运行LastActivity的finish方法,LastActivity退出,然后SecondActivty也退出,此时就退出App了。
上面的方式是所有的Activity都存在同一个任务栈中的情况,对于拥有不同任务栈的不同Activity是否也能真正意义上的完全退出App呢?下面我们将在AndroidManifest.xml文件中对SecondActivity跟LastActivity中做如下设置,使其位于不同的任务栈中:
<activityandroid:name=".SecondActivity"android:launchMode="singleTask"android:taskAffinity="com.umeng.social"/><activityandroid:name=".LastActivity"android:launchMode="singleTask"android:taskAffinity="com.umeng.social.test"/>
此时我们查看任务栈的情况,如下:
此时我们可以看见MainActivity跟SecondActivity在不同的任务栈中,此时点击退出App按钮后,其Activity栈的情况如下:
可以看到此时三个Activity都在不同的任务栈中。细心的同学可能已经发现问题了,为什么LastActivity已经启动,而MainActivity还没有被销毁?是的,这里就是上面提到的'清理跟此Activity“相关”的任务栈'中“相关”两字的特殊意义了,这说明在清理Activity时是有条件的,其条件为“被clean的Activity必须跟需要启动的Activity在同一任务栈中”。由于现在MainActivity、SecondActivity、LastActivity在不同任务栈中,因此Activity不会被清理。执行断点后续代码,此时Activity栈中依然存在MainActivity,导致整个App是不能完全退出的。
到此,关于“Android中如何安全退出多个Activity”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?