温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中如何安全退出多个Activity

发布时间:2022-04-15 16:28:32 来源:亿速云 阅读:196 作者:iii 栏目:编程语言

这篇文章主要介绍“Android中如何安全退出多个Activity”,在日常操作中,相信很多人在Android中如何安全退出多个Activity问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android中如何安全退出多个Activity”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

实现步骤:

1:创建一个“空”的辅助Activity,在其onCreate方法中调用finish方法。如下:

public class LastActivity extends Activity {  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); } }

2:点击“退出App”的按钮执行以下方法:

findViewById(R.id.quit).setOnClickListener(new OnClickListener() {  @Override public void onClick(View v) { Intent intent = new Intent(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中做如下设置,使其位于不同的任务栈中:

<activity android:name=".SecondActivity" android:launchMode="singleTask" android:taskAffinity="com.umeng.social" /> <activity android: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”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI