当用户在我的应用程序中点击“注销”时,我希望他们被带到“登录”活动并杀死我的应用程序中的所有其他正在运行或已暂停的活动。Android - 注销所有活动
如果用户以前登录过,我的应用程序使用共享首选项绕过启动时的“登录”活动。因此,在这种情况下,FLAG_ACTIVITY_CLEAR_TOP将不起作用,因为登录活动将在用户被带到那里时位于活动堆栈的顶部。
当用户在我的应用程序中点击“注销”时,我希望他们被带到“登录”活动并杀死我的应用程序中的所有其他正在运行或已暂停的活动。Android - 注销所有活动
如果用户以前登录过,我的应用程序使用共享首选项绕过启动时的“登录”活动。因此,在这种情况下,FLAG_ACTIVITY_CLEAR_TOP将不起作用,因为登录活动将在用户被带到那里时位于活动堆栈的顶部。
你可以使用一个BroadcastReceiver来监听你的其他活动“杀信号”
http://developer.android.com/reference/android/content/BroadcastReceiver.html
你们的活动,你注册一个BroadcastReceiver
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("CLOSE_ALL");
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// close activity
}
};
registerReceiver(broadcastReceiver, intentFilter);
然后你只需发送一个广播从您应用中的任意位置开始
Intent intent = new Intent("CLOSE_ALL");
this.sendBroadcast(intent);
代替FLAG_ACTIVITY_CLEAR_TOP
使用FLAG_ACTIVITY_CLEAR_TASK
(API 11+虽然):
如果传递给Context.startActivity()的意图设置,该标志将导致将与活动相关联之前被清除任何现有任务活动开始。也就是说,活动成为空的任务的新根,任何旧的活动都完成了。这只能与FLAG_ACTIVITY_NEW_TASK结合使用。
这是完美的。谢谢。 :) – Enrichman
对于API 11+,您可以使用Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
这样的:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
这将完全清除所有之前的活动(一个或多个),并开始新的活动。
嘿rockstar,放下你的吉他:) – Karoly
这应该是正确的答案。为此使用广播就是这样的黑客! –
这是你的答案.. http://stackoverflow.com/questions/5453206/how-to-close-all-the-activities-of-my-application – Abhishek
必须错过这个答案,非常有帮助。谢谢 –