2012-09-04 49 views
5

当用户在我的应用程序中点击“注销”时,我希望他们被带到“登录”活动并杀死我的应用程序中的所有其他正在运行或已暂停的活动。Android - 注销所有活动

如果用户以前登录过,我的应用程序使用共享首选项绕过启动时的“登录”活动。因此,在这种情况下,FLAG_ACTIVITY_CLEAR_TOP将不起作用,因为登录活动将在用户被带到那里时位于活动堆栈的顶部。

+1

这是你的答案.. http://stackoverflow.com/questions/5453206/how-to-close-all-the-activities-of-my-application – Abhishek

+0

必须错过这个答案,非常有帮助。谢谢 –

回答

12

你可以使用一个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); 
+0

这个工作就像一个魅力,谢谢你的帮助 –

+0

这是一个非常整洁和快速的解决方案。 Upvote – sandalone

+0

如此甜蜜的方式来使用android api :) –

2

代替FLAG_ACTIVITY_CLEAR_TOP使用FLAG_ACTIVITY_CLEAR_TASK(API 11+虽然):

如果传递给Context.startActivity()的意图设置,该标志将导致将与活动相关联之前被清除任何现有任务活动开始。也就是说,活动成为空的任务的新根,任何旧的活动都完成了。这只能与FLAG_ACTIVITY_NEW_TASK结合使用。

+0

这是完美的。谢谢。 :) – Enrichman

8

对于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); 

这将完全清除所有之前的活动(一个或多个),并开始新的活动。

+0

嘿rockstar,放下你的吉他:) – Karoly

+0

这应该是正确的答案。为此使用广播就是这样的黑客! –