2012-09-27 85 views
1

我正在建立一個聊天客戶端Android ICS。我有一個可以導致聊天活動的名單(聯繫人)活動(點擊名單(聯繫人)列表中的一個條目後)。然後,人們可以聊天,並可以在點擊聊天屏幕上的按鈕後回到名單屏幕。荒誕行爲的行爲

用於創建意圖的代碼開始活動的標誌是:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

還有名冊活動屏幕上的搜索按鈕,這需要我們的搜索活動,這又允許我們去聊天活動。

這裏使用的標誌是相同的。所有三個都是singleTask。

現在的問題是,當我從名冊活動到聊天活動,然後回到名冊活動,那麼一切都很好。但是當我從名冊活動去搜索活動,然後去聊天活動,然後回到名冊活動,然後名冊活動得到重新創建,即oncreate()名冊的功能被稱爲。這在其他流程中不會發生。

任何人都可以解釋這一點。創建一個新的搜索活動可能不讚賞,但假設它的好,可以爲什麼會發生這種情況的原因?

另外ondestroy()名冊活動沒有被稱爲(因爲它不是強制)。

+1

您確定要實際重新排列活動嗎?這通常會造成非常尷尬的用戶體驗,因爲它會擾亂訪問屏幕的順序。相反,看看ACTIVITY_CLEAR_TOP,通過維護一個有序的任務堆棧,可以達到類似的效果。 http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP – Matthias

+0

所以如果我使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT那麼我的後退按鈕不會像我以前想的那樣行事?它是一個好點。 – singhsumit

+0

否 - 自從彈出活動A重新排序到活動堆棧的前端時,您將位於堆棧的頂部,此堆棧先前包含A在不同的位置,因此您的用戶將遇到「間隙」在活動堆棧中更進一步。 – Matthias

回答

2

您必須始終期待onCreate在任何時間點在從其他屏幕恢復或以其他方式返回到您的活動之後被調用。 Android可能會選擇終止任何已暫停的活動,即對用戶隱藏的活動。當回到那個活動,如果遭到破壞,Android將通過調用的onCreate重新創建它(和onRestoreInstanceState,這就是爲什麼你要保存的應該活得比上下文onRetainInstanceState變化性數據。)

沒有什麼這種行爲荒謬,它作爲Android的activity life-cycle的一部分被充分記錄。

+0

我認爲這是荒謬的,因爲oncreate()函數只能在其中一個流中調用,而不能在其他流中調用。 – singhsumit

+0

是在設備上還是在仿真器上?在內存很小的設備上,應用程序(尤其是圖形較重的應用程序)在被其他屏幕(例如主屏幕或其他應用程序)留下時會非常頻繁地被Android破壞。 – Matthias