2011-06-04 64 views
2

我一直在尋找和閱讀,而不是喜歡一個簡潔的答案,這符合我的需要,所以希望你們可以指出我在正確的方向。從broadcastreceiver更新應用程序狀態(全局變量)

我有一個簡單的應用程序,需要定期檢查網站的結果。仔細閱讀,似乎使用AlarmManager是安排事件發生的最合適方式,而不是後臺服務。

主要活動顯示網絡查詢的最新結果,該查詢發生時,以及下一次由於重新查詢。

我遇到的問題是,我沒有意識到BroadcastReceiver運行在一個單獨的過程中...當接收器更新應用程序的最後一個查詢結果,最後檢查時間和下一次檢查時間,顯然不是這樣做在應用程序使用的對象的副本;-)所以它看起來陳舊,當我打開應用程序...

我試過了從BroadcastRecevier和主要活動設置的StateManager類的靜態變量,我試過將StateManager指定爲Application子類,並將它指定爲清單中的android:name ...似乎都以不同的副本結尾,所以從broadcastreceiver更新的狀態不是應用程序所看到的狀態。

NOw我開始明白髮生了什麼...我努力去理解解決它的最佳方法。

使用SQLLite數據庫來保持狀態將會太麻煩了,因爲我想存儲一個對象圖,看起來你不能這樣做(即使SQLLite存儲blob,android界面沒有覆蓋還沒完成 ?)。我顯然不想在O-R映射上花費數小時。

我'目前'通過通知管理員在網絡查詢突出顯示需求時提出通知,並允許我將意圖和額外內容傳遞給應用..因此,該部分適用於我...但是,當webquery返回的結果不需要生成通知時,我沒有「路徑」返回給應用程序以給它下一次檢查時間,並且我不'想讓應用程序只爲了有一種方式把額外的東西傳給它。

我想這個問題的關鍵是,我想, 從broadcastrecevier,到什麼地方堅持一個對象,我的應用程序可以檢索時,它的現場 或 有一個BroadcastReceiver應用程序執行過程中的工作(不使應用程序到前臺),以便對活動使用的實例進行任何靜態變量更改。

如果最好的方法是把它寫成一個服務,那就這樣吧(如果是這樣的話,那麼在我開始編寫代碼之前,我會在與應用程序相同的進程中運行服務,否則我會得到類似的結果沒有做一個單身人士應該做的事情「,我一直在與廣播收訊者進行溝通!)

回答

0

似乎我在應用清單的接收器部分指定了android:process=":remote"。刪除,使鬧鐘運行int他解決問題的應用程序線程。