簡體   English   中英

在Android的后台服務中進行用戶跟蹤和數據發送

[英]User tracking and data sending in a background service in Android

細節

啟動應用程序時,該應用程序正在運行后台服務。 在此服務中, onStartCommand()開始使用參數讀取GPS位置,該參數用於onStartCommand()讀取之間傳遞的儀表。 比方說50米。 每次讀取位置都會發生以下操作:

  • 讀取位置存儲在本地數據庫中
  • 從數據庫檢索所有未發送的位置
  • 位置已發送到Web服務器
  • 如果發送成功,則從數據庫中刪除位置

現在每次讀取位置都會發生這種情況。用戶可能正在走動,需要花費一些時間才能使50米長或快速行駛,而可以進行多次讀取並且在數據庫插入/檢索中可能會變得混亂。 因此,主要請求之一是在讀取所有讀取位置時對其進行順序處理。 類似於:讀取位置1,將其插入,發送...讀取位置2,將其插入,發送。

我找不到正確的方法來執行此操作。 如您所知,該服務在與應用程序相同的主線程中運行,因此,我絕對需要使用線程來保持UI的平穩運行。

我當時正在考慮使用ExecutorService和Executors.newSingleThreadExecutor(),以便在每次讀取位置時向其提交新線程。 這樣,我確保按順序進行處理,但是...我為每次讀取創建新線程,這可能不是一件好事。

您會針對這種情況建議哪種最佳方法?

我要做的是每次讀取位置時都刪除該服務並拋出IntentService

您可以將帶有requestion intent參數的requestLocationUpdates一起使用,並使用觸發您的intent服務的intent設置pending的intent參數。

然后,您可以在intentservice的onHandleIntent中處理位置更新。 Intent由Intent服務順序處理,並在單獨的線程中處理它們(然后到期)。

如果只需要在后台消耗一次鏡頭事件,那么intentservice是一個更緊湊,更合適的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM