2012-08-25 131 views
2

我想關閉堆棧中的所有活動,然後再去新的活動。Intent.FLAG_ACTIVITY_CLEAR_TOP沒有關閉在android中的所有活動在android

這是我的代碼

Intent i=new Intent(first.this,secondsct.class); 
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         //i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
         //i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
         //i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(i); 
         finish(); 

但是,這是行不通的。我早些時候嘗試過,但不是現在。我不知道爲什麼。任何人都可以知道可能是什麼原因。

+0

在您的清單文件中,您是否定義了具有任何值的'android:launchMode'? –

+0

不需要我必須爲所有活動設置它 – Vipin

回答

1

您可以嘗試FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_NEW_TASK一起使用。

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP) 

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

+0

這對我以前的工作,但現在它不起作用。 – Vipin

+0

在堆棧中是否已存在被調用活動(秒)的實例?如果您看到有關'CLEAR_TOP'的文檔,它說>「如果已設置,並且正在啓動的活動已在當前任務中運行,則不是啓動該活動的新實例,而是在其上的所有其他活動都將被關閉,這個意圖將作爲一個新的意圖傳遞給(現在在頂部)舊的活動。「 –

+0

不,在堆棧中不存在secondsct的實例。 – Vipin

7

我已經試過Intent.FLAG_ACTIVITY_CLEAR_TOP但還沒有得到妥善的解決辦法,以便最終這有助於我

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
ComponentName cn = intent.getComponent(); 
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); 
startActivity(mainIntent); 

清除所有堆棧,只運行LoginActivity

+1

在我的情況下,這是獨特的解決方案,工作!謝謝! – DBragion

+1

它也適用於我,但爲什麼CLEAR_TOP不工作? – fish40

0

使用此功能wheneve你想退出。希望這將解決您的問題

public void exit() 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
+0

這裏你可以用你想要開始的活動來回報最後一行......它需要一些修改 –

0

我也嘗試了所有可能的標誌,我被調用,就像你做的finish()方法。但是我找到了一個更好的方法來代替使用finishAffinity()方法來結束以前的所有活動。

在第三個答案中提出了此解決方案here。它解決了我的問題。希望它能解決你的問題。