我希望完成应用程序中正在运行的所有活动,即要从堆栈中删除所有父活动。
我想在我的应用程序中本地实现注销功能,所以我在考虑,我将结束之前启动的所有活动,并重新开始登录活动。
我希望完成应用程序中正在运行的所有活动,即要从堆栈中删除所有父活动。
我想在我的应用程序中本地实现注销功能,所以我在考虑,我将结束之前启动的所有活动,并重新开始登录活动。
我应该让你知道,在Android中这不是推荐的行为,因为你应该让自己来管理活动的生命周期。
然而,如果你真的需要这样做,你可以使用FLAG_ACTIVITY_CLEAR_TOP。
我在这里提供一些示例代码,其中MainActivity是应用程序中的第一个活动:
public static void home(Context ctx) {
if (!(ctx instanceof MainMenuActivity)) {
Intent intent = new Intent(ctx, MainMenuActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ctx.startActivity(intent);
}
}
如果你想退出整个应用程序,可以使用以下代码,并在MainActivity中检查以完全退出应用程序:
public static void clearAndExit(Context ctx) {
if (!(ctx instanceof MainMenuActivity)) {
Intent intent = new Intent(ctx, MainMenuActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Bundle bundle = new Bundle();
bundle.putBoolean("exit", true);
intent.putExtras(bundle);
ctx.startActivity(intent);
} else {
((Activity) ctx).finish();
}
}
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
Intent i = new Intent(..);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
然后使用此意图启动活动。
有关任务和返回堆栈的更多信息,请参见文档:任务和返回堆栈。
但是,要实现应用程序的登录/注销(如果它没有与在线服务通信),您可以使用SharedPreferences。这样,在应用程序启动时,您可以检查用户是否已登录(例如,在偏好设置中打开了某个标志),并在应用程序退出时(例如,通过按钮),您可以清除此标志。
杀死/删除活动应留给系统。按系统设计,Android操作系统负责应用程序的生命周期。
例如,检查密码保险箱应用程序源。每次打开新的应用程序实例时,它都需要密码。