我遇到了具有多個活動的應用程序的一個特殊問題。我有一個綁定到服務的屏幕管理器類。該服務調查服務器的數據。屏幕管理器根據數據啓動活動A,B或C.它還將允許用戶選擇顯示其他活動,或者可以根據服務中的新數據自動換出活動。目前所有的導航工作都很好,如果用戶按Home鍵,當用戶從Android主屏幕或最近運行的應用程序列表中按下應用程序圖標時,適用的活動會回到前臺。Android,推薦使用什麼Intent標誌通過通知開始的活動
然後我不得不實現一個新功能來顯示圖標和通知。我首先通過在每個活動onPause中將活動設置爲不可見時才顯示通知來實現此目的。像魅力一樣工作,並給用戶第三個選項,在主頁按鈕按下後重新顯示應用程序。但是,如果來自服務器的數據(當應用程序未顯示時)導致屏幕管理器更新要顯示的活動,我有問題。我認爲我的活動堆棧被搞砸了。自從我嘗試了一個不同的模型,其中屏幕管理器處理通知並始終顯示通知,並在每次更新活動時使用新的Intent進行更新,但仍未切割。
當應用程序最小化和數據的變化,我可以看到屏幕管理程序調用startActivityForResult在新的活動,它看起來像Android的知道我們被最小化,並且不顯示活動。然後,我也可以通過屏幕管理器調用完成舊的頂部活動。
每個活動目前擁有該標誌在代碼清單和FLAG_ACTIVITY_SINGLE_TOP設置爲singleTop。當服務器上的數據沒有變化時,我使用上述任何一種方法將應用程序重新啓動,得到我期望的結果,並調用Activity的onNewIntent。但是,當數據發生變化並且用戶通過通知調用應用程序時,它會調用Activities onCreate。該活動確實出現並運行,但後來按下後,我看到的是另一個相同活動的實例,而不是退出。我仔細看了一眼我的logcat,看到2個對Activity的onResume的調用,但之後沒有翻倍。
我覺得我可能只是想失去一些簡單的東西,就像通知的意圖中的另一個意圖標誌?感謝您的任何想法!
「什麼是殺我是服務器的數據在不顯示時發生變化。」對不起,不應該使用俚語。正如試圖說的那樣,它的運行效果很好 - 除非屏幕管理器被告知要更改顯示的活動,否則不會顯示0,而且我發現非常令人沮喪。感謝您的建議,我會重試使用該附加標誌。 – bursk 2010-11-09 00:55:04
感謝您的想法,但設置該標誌似乎並沒有改變行爲。 – bursk 2010-11-09 16:19:14
我想我發現你的建議似乎沒有奏效。我認爲另一個後臺線程阻止了第一次調用從執行中啓動活動,所以當通知的意圖觸發時,它看不到堆棧頂部的活動。所以活動創建並顯示。然後當我使用後退按鈕解除它時,它將從堆棧中移除。 – bursk 2010-11-14 15:10:35