我的应用程序有很多活动,可以按任意顺序调用
活动历史记录示例:
A-> B-> C-> D-> A-> B-> Ë
现在在活动E中,我正在“注销”设备(注销用户,并删除他们可能已下载到sdcard的所有数据).期望的行为是该应用程序“重新启动”,并且提示用户进行登录活动,然后单击该按钮将使用户返回主屏幕.
因此,现在,活动E应该以某种方式清除活动堆栈.当前,当我从E启动A的意图时,我正在设置FLAG_ACTIVITY_CLEAR_TOP.问题是,当用户访问A然后进入中间活动并在转到E之前再次访问A时,堆栈上仍然有活动.
A-> B-> C-> D->一种
因此,该用户已注销,无法使用活动B-D,但是如果用户从活动A回击,则他们可以访问活动B-D.是否有一种简单的方法可以从堆栈中清除除登录活动以外的所有活动?
更新:
因此,我尝试更新BaseActivity(我的应用程序中的每个活动都将其子类化)以包含一个静态标志isDeregistering,该标志告知活动如果为true则自行销毁.问题是,每个活动都调用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;
}
使用反射,我可以决定是否终止基本活动,以便家庭启动器可以在LoginActivity处重新启动应用程序.我只需要确保在通过手动调用finish()执行登录后,LoginActivity不会保留在堆栈中.
标签:android
来源: https://codeday.me/bug/20191209/2096385.html