2014-08-28 83 views
0

我正在從事這個項目,我需要位置更新和數據上傳,即使主應用程序不在前臺。我正在考慮將所有位置和網絡功能放在一個服務中(XService,參數爲參數),並在同一進程中使用廣播(不能訪問其他應用程序)在活動(主)和XService之間進行通信。LocationManager和網絡服務

我還沒有寫代碼,但工作流轉是這樣的:


1.主 - 啓動。在onCreate中,啓動一個新的線程,並在其上實例化並綁定XService。
2. Main - 登錄畫面。獲取數據, 將其打包在Intent中並廣播到XService。
3. XService - 接收廣播,解包意圖。安裝套接字和數據流。設置 LocationManager進行更新。廣播到主要網絡是 準備好。每次上傳數據LocationManager更新。
4.主要 - 收到網絡就緒廣播後,準備初始化和廣播的意圖。
5. XService - 接收 初始化請求廣播,解包,執行網絡任務, 廣播響應。
6.根據用戶 互動和任何定時更新重複廣告噁心
x。 Main - 在註銷時,向XService廣播 。
x + 1。 XService - 發送註銷信息到 服務器,關閉套接字,廣播到Main,它正在優雅地退出 ,然後stopSelf()。
x + 2 Main - 完成註銷 程序。

我的主要問題是 - 這是正確的方式嗎?

另一個問題是:當XService將位置更新廣播到Main,但Main停止(即未在前臺運行)時會發生什麼情況?我認爲,由於Main處於停止狀態,因此MainRedReceiver沒有實例化,所以廣播本質上什麼都不做。這種未被廣播的廣播如何影響(或不是,視情況而定)XService或一般的過程/設備?

回答

0

這很有道理。我的建議是在主線程上啓動服務,然後在Service類中形成新的線程。這將很好地包裝服務,以便您不必生成一個線程來使用它,您可以調用它。

如果Main停止並且廣播發送消息,則它是一個丟失的消息。您希望通過在OnStart中註冊接收器並在OnStop上取消註冊來避免這些情況。您可以保存活動可能需要在服務中知道的任何相關信息。

廣播接收器的替代品是Messenger類。 (http://developer.android.com/reference/android/os/Messenger.html

+0

回覆:線程服務,而不是主要:好的建議,謝謝。它肯定會讓線索更容易跟蹤。 我假設你的意思是我應該註銷接收器onStop(而不是onStart)。當活動啓動時,它可以向服務部門要求提供所需的信息。 Messenger類看起來很有趣。我將不得不做更多的研究,以便更好地滿足我的需求。 – LiveMynd 2014-08-28 04:46:33

+0

啊,是的,這就是我的意思。是的,這個信使類非常棒,我用它在這個應用程序中不斷更新來自服務的位置數據的活動。您是否打算使用位置服務或locationClient等新位置apis(現在已棄用)? – 2014-08-28 05:06:32

+0

實際上,我的應用程序是互聯網隱私研究的一部分,因此計算機參與者越少,分析數據就越容易。因此,我將使用簡單的android.location庫和類,因此我不必將Google Play服務(包含位置服務)納入我的研究範圍。 – LiveMynd 2014-08-28 06:48:31