2012-09-04 70 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

這應該是正確的答案。爲此使用廣播就是這樣的黑客! –