2011-05-05 28 views
4

我想我剛剛發現一個非常奇怪的錯誤...但它正好可以somekind的功能,我從來沒有聽說過的..安卓:FLAG_ACTIVITY_CLEAR_TOP和android:launchMode =「singleInstance」

在我的應用程序如果我對AndroidManifest與Android任何活動:launchMode =「singleInstance」當您嘗試「乾淨」堆棧到某一點用下面的代碼:

Intent intent = new Intent(this, Xpto.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 

它轉到該活動..但是當你按回去,它回到以前..應該已經完成​​...

實施例:

A - >乙 - 「ç

然後從C I調用與Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP在Manifest上有一個singleInstance。它去A,但它只把它帶到前面..並沒有完成C和B.

有人可以解釋這種行爲嗎?

我所調用的Xpto類是當時堆棧的根活動。

感謝

回答

3

從閱讀此線程:

http://groups.google.com/group/android-developers/browse_thread/thread/5eb400434e2c35f4

看來:

「活動B在上面的例子中當前運行的實例將 要麼接受新意圖你從這裏開始onNewIntent() 方法,或者自己完成並重新啓動新的意圖。如果它 有聲明其啓動模式爲「多個」(默認),並且您沒有在同一個意圖中設置FLAG_ACTIVITY_SINGLE_TOP,那麼它會被 完成並重新創建;對於所有其他啓動模式,或者如果設置了 FLAG_ACTIVITY_SINGLE_TOP,則此Intent將被傳遞到 當前實例的onNewIntent()。 「

,這意味着你需要設置你的launchMode多個實例,並且只使用FLAG_ACTIVITY_CLEAR_TOP。

Intent intent = new Intent(this, Xpto.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 

在你所描述的,活動的B和C,當你開始沒有完成的情況下活性A(其是根活動),文檔描述了在singleInstance的啓動模式和FLAG_ACTIVITY_SINGLE_TOP標誌設置的情況下,活動B和C將不會完成,如果你想完成活動B和C,那麼你必須將啓動模式設置爲多個實例並不設置標誌FLAG_ACTIVITY_SINGLE_TOP。

+0

再次閱讀我的問題。沒有提供答案。 – neteinstein 2012-02-21 10:29:00

+0

我相信你要問的是,在你描述的場景中,爲什麼當你開始活動A(這是根活動)時,活動的B和C沒有完成。我試圖解釋的,也許很糟糕的是,文檔描述了singleInstance的啓動模式和flag FLAG_ACTIVITY_SINGLE_TOP設置,活動B和C將不會完成。如果您想完成活動B和C,則必須將啓動模式設置爲多個實例,而不是設置標誌FLAG_ACTIVITY_SINGLE_TOP。希望這可以幫助。 – groffhibbitz 2012-02-23 22:50:23