gpt4 book ai didi

android - 如何清除 Android 应用程序中的所有 Activity

转载 作者:太空狗 更新时间:2023-10-29 12:58:16 32 4
gpt4 key购买 nike

我的应用程序有许多可以按任何顺序调用的 Activity

示例 Activity 历史记录:A -> B -> C -> D -> A -> B -> E

现在在 Activity E 中,我正在“注销”设备(注销用户,并删除他们可能已下载到其 SD 卡中的所有数据)。期望的行为是应用程序“重新开始”,系统会提示用户登录 Activity ,然后点击返回会将用户返回到主屏幕。

所以现在, Activity E 应该以某种方式清除 Activity 堆栈。目前,我在从 E 启动 A 的 Intent 时设置 FLAG_ACTIVITY_CLEAR_TOP。问题是,当用户访问 A 然后转到中间 Activity 并在转到 E 之前重新访问 A 时,堆栈上仍有 Activity 。

A -> B -> C -> D -> A

因此用户已注销,无法使用 Activity B-D,但如果用户从 Activity A 返回,则他们可以访问 Activity B-D。有没有一种简单的方法可以从堆栈中清除除登录 Activity 之外的所有 Activity ?

更新:

因此,我尝试更新我的 BaseActivity(我的应用程序中的每个 Activity 都是该 Activity 的子类)以包含一个静态标志 isDeregistering,它告诉该 Activity 在为真时自行销毁。问题是,每个 Activity 都调用 finish(),我被引导到主屏幕并且在强制关闭应用程序之前无法重新启动应用程序。有更好的方法吗?

最佳答案

我找到了一个可行的解决方案。以下代码进入我的 BaseActivity 类。

    public boolean killIfDeregistering() {
if (isDeregistering) {
Log.d(TAG, "deregistering true!");
if (getClass().getName().equals(LoginActivity.class.getName())) {
//don't destroy activity, reset flag
Log.d(TAG, "stopping deregister process!");
isDeregistering = false;
} else {
//finish the activity
Log.d(TAG, "killing this activity!");
finish();
return true;
}
}
return false;
}

使用一些反射,我可以决定是否终止基本 Activity ,以便主页启动器可以在 LoginActivity 重新启动应用程序。我只需确保 LoginActivity 在通过手动调用 finish() 执行登录后不会保留在堆栈中。

关于android - 如何清除 Android 应用程序中的所有 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3825987/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com