2013-02-06 35 views
0

我有一個應用程序需要跟蹤我的位置,在讀取傳感器的同時讀取傳感器信息(即當前速度)。該活動還有一個「停止」按鈕,允許用戶取消後臺作業。如果用戶離開並且通知應該允許用戶返回顯示信息的視圖,則數據收集應該繼續。在Android中使用背景到前景的數據的後臺作業

到目前爲止,我有:

  • 具有private static MyService instance場和一個getter它
  • 它設置instance = thisonStartCommand(...)
  • 它也有當前一個getter服務
    • 數據(包裹在對象中)
    • 它提供了一個goForeground()方法,該方法調用startForeground(...)並且示出了通知(goBackground()確實倒數)
  • 一個活動
    • 調用在onCreate(...)MyService.getInstance(),如果返回null它創建具有startService(someIntent)
    • 一個updateViews()方法拉動從所述數據中的服務服務並使用處理程序調度自己以每500ms更新視圖

這有效。 但是我很確定這不是推薦的方式。這真是醜陋,所有對getInstance()返回值的調用都包含在非空檢查中。此外,所有工作都在UI線程中發生(當我向服務添加更多計算時,這肯定會導致問題)。另外,我想擺脫活動輪詢服務的數據。

什麼是推薦方法做到這一點?

Android文檔在這一點上並不十分清楚,我在Google上發現的所有內容都過時或解決了不同的問題。請記住:

  • 我的背景工作本質上是無止境的,不會在某個時間點「完成」。只有用戶可以決定這(這排除了的AsyncTask,或不?)
  • 我需要從後臺通過一些非原始日期前景
  • 我需要控制從活動背景
  • 的活動應該能夠「重新連接」的背景下,如果它被關閉並重新打開

回答

0

至於你說從服務拉出數據是不是最好的做法,幸好有一個叫BroadcastReceiver這樣的事情,這個類喚醒當一個意圖發送和接收器被配置爲接收它(在清單中)。

這可以讓您的服務在準備就緒時發送數據,或者反過來說,您的活動可以發送新數據的請求。

請注意,意圖可以保存數據,因此您不需要將任何靜態實例保存到服務中,只需將數據傳遞給意圖