2011-07-13 124 views
1

當我想關閉任務中的所有活動時,此代碼有什麼問題?關閉任務中的所有活動

public static void closeAllBelowActivities(Activity current) 
{ 
    boolean flag = true; 
    Activity below = current.getParent(); 
    if (below == null) 
     return; 
    System.out.println("Below Parent: " + below.getClass()); 
    while (flag) { 
     Activity temp = below; 
     try { 
      below = temp.getParent(); 
      temp.finish(); 
     } catch (Exception e) { 
      flag = false; 
     } 
    } 
} 
+0

你會得到什麼?錯誤信息? – woliveirajr

+1

如果我正在閱讀這個權利,你會錯誤的方式......你應該關閉*孩子*,而不是父母。 – thegrinner

+0

由於它是一個堆棧,所以每個活動(Parent)都會在其本身之上啓動一個新的活動(Child)。所以如果我想從最頂層的活動迭代到最底層的活動,我會做getParent(),否? –

回答

1

的方式Android版是活動生活在一個堆棧(你可能知道),所以如果A調用B調用C調用d

堆棧看起來像

// D - Current 
// C 
// B 
// A 

如果所有你試圖做的是確保C,B,A不再在堆棧中,那麼你應該在調用下一個活動之前調用finish()

A.startActivity(B) 
A.finsh() 
    --- 
    B.startActivity(C) 
    B.finish() 

等等,所以我想我的下一個問題是,你爲什麼要通過當前活動與來自調用活動的方式來實現這一點?

您還可以使用意向標誌FLAG_ACTIVITY_CLEAR_TOP清除除最新活動外的所有歷史列表,這可能是您正在嘗試執行的操作嗎?

+0

我正在嘗試實現註銷行爲。我已經實施了FLAG_ACTIVITY_CLEAR_TOP |基於FLAT_ACTIVITY_SINGLE_TOP的解決方案。但我想看看是否有更好的方法。 –

+0

好吧,但這不是你的問題所在,無論如何,很高興你找到了解決方案。 – Idistic

相關問題