2010-11-08 42 views
8

我遇到了具有多個活動的應用程序的一個特殊問題。我有一個綁定到服務的屏幕管理器類。該服務調查服務器的數據。屏幕管理器根據數據啓動活動A,B或C.它還將允許用戶選擇顯示其他活動,或者可以根據服務中的新數據自動換出活動。目前所有的導航工作都很好,如果用戶按Home鍵,當用戶從Android主屏幕或最近運行的應用程序列表中按下應用程序圖標時,適用的活動會回到前臺。Android,推薦使用什麼Intent標誌通過通知開始的活動

然後我不得不實現一個新功能來顯示圖標和通知。我首先通過在每個活動onPause中將活動設置爲不可見時才顯示通知來實現此目的。像魅力一樣工作,並給用戶第三個選項,在主頁按鈕按下後重新顯示應用程序。但是,如果來自服務器的數據(當應用程序未顯示時)導致屏幕管理器更新要顯示的活動,我有問題。我認爲我的活動堆棧被搞砸了。自從我嘗試了一個不同的模型,其中屏幕管理器處理通知並始終顯示通知,並在每次更新活動時使用新的Intent進行更新,但仍未切割。

當應用程序最小化和數據的變化,我可以看到屏幕管理程序調用startActivityForResult在新的活動,它看起來像Android的知道我們被最小化,並且不顯示活動。然後,我也可以通過屏幕管理器調用完成舊的頂部活動。

每個活動目前擁有該標誌在代碼清單和FLAG_ACTIVITY_SINGLE_TOP設置爲singleTop。當服務器上的數據沒有變化時,我使用上述任何一種方法將應用程序重新啓動,得到我期望的結果,並調用Activity的onNewIntent。但是,當數據發生變化並且用戶通過通知調用應用程序時,它會調用Activities onCreate。該活動確實出現並運行,但後來按下後,我看到的是另一個相同活動的實例,而不是退出。我仔細看了一眼我的logcat,看到2個對Activity的onResume的調用,但之後沒有翻倍。

我覺得我可能只是想失去一些簡單的東西,就像通知的意圖中的另一個意圖標誌?感謝您的任何想法!

回答

5

什麼是我的命是從服務器上沒有顯示時改變的數據。

我不知道這意味着什麼。

我覺得我可能只是錯過了像通知的意圖另一個意圖標誌簡單的東西?

我用Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP來處理「帶我回到似乎是同一活動的另一個實例」的問題,但就我而言,我有一個單一活動的應用程序。

FLAG_ACTIVITY_CLEAR_TOP的文件也說:

「這種發射方式也可以使用,效果良好結合FLAG_ACTIVITY_NEW_TASK:如果用於啓動任務的根系活力,就會帶來任何當前運行的實例將該任務放到前臺,然後將其清除爲根狀態,這尤其有用,例如,從通知管理器啓動活動時。「

還有FLAG_ACTIVITY_REORDER_TO_FRONT

」。例如,考慮一個任務由四個活動:A,B,C,D,如果d用解析爲活性成分的意圖調用startActivity() B,那麼B將被帶到歷史堆棧的前面,結果爲:A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP也被指定,該標誌將被忽略。「

也許其中一種模式適合你的需要

+0

「什麼是殺我是服務器的數據在不顯示時發生變化。」對不起,不應該使用俚語。正如試圖說的那樣,它的運行效果很好 - 除非屏幕管理器被告知要更改顯示的活動,否則不會顯示0,而且我發現非常令人沮喪。感謝您的建議,我會重試使用該附加標誌。 – bursk 2010-11-09 00:55:04

+0

感謝您的想法,但設置該標誌似乎並沒有改變行爲。 – bursk 2010-11-09 16:19:14

+0

我想我發現你的建議似乎沒有奏效。我認爲另一個後臺線程阻止了第一次調用從執行中啓動活動,所以當通知的意圖觸發時,它看不到堆棧頂部的活動。所以活動創建並顯示。然後當我使用後退按鈕解除它時,它將從堆棧中移除。 – bursk 2010-11-14 15:10:35