我正在寫一個應用程序,需要每分鐘註冊實際位置,無論是在前臺還是後臺。當用戶決定停止跟蹤時,我想收集收集的所有數據並使用它們。後臺服務與數據供以後使用最佳實踐
爲此,我想到了一種架構,它試圖節省電池,並儘可能提高效率。我想知道我的選擇是否足夠體面。這裏是:
我從一個Activity通過startService()啓動一個服務S.該服務將構建一個數據結構以保存數據供以後使用。活動和服務之間的通信也將通過Messenger對象創建。
我註冊將被接收機R.來管理它會是這樣的位置更新:
this.lm= (LocationManager) getSystemService(LOCATION_SERVICE); Intent locationIntent= new Intent(getApplicationContext(),TravelPosition.class); PendingIntent locationPendingIntent= PendingIntent.getBroadcast(getApplicationContext(), 0, locationIntent, PendingIntent.FLAG_UPDATE_CURRENT); lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 7000, 1, locationPendingIntent);
每次接收器R的觸發,它將與服務S.溝通我正在考慮一個startService(Intent),我將座標放在Intent的extras中。
服務S將在其內部數據結構中存儲新數據(我的新位置座標和其他信息)。無論應用程序是在前臺運行還是在後臺運行,一切都應該起作用
一旦用戶通過活動中的按鈕停止跟蹤,後者將與服務進行通信以獲取存儲的數據,然後調用它stopService
您對此有何看法? 還有一個額外的問題:如果用戶想要殺死應用程序,接收器會發生什麼?它會打開應用程序嗎?
很酷,感謝您的鏈接(特別是第一個!) – Bertuz
因此,回顧一下:我在某處(在我的活動中)創建了一個BroadcastReceiver並註冊了它。之後,我可以訪問它,這要歸功於我保存的一個簡單參考,並在我不再需要時取消註冊。對? :-) 只是爲了我的好奇心:我可以首先想到更重/更復雜任務的架構嗎?有沒有一個好的場景,我最好在接收器上使用服務? – Bertuz
這是正確的。在cae中,如果您需要進行繁重的工作,那麼您可能應該創建一個服務並創建工作線程以便在此服務中處理。主要原因是不阻止(因爲我記得Receiver不會被第二次調用,直到第一次調用沒有完成)。 –