2013-04-09 44 views
4

場景:的Android:發送在背景週期性位置數據(每30秒),並要求服務器爲新數據

發佈到服務器,以獲得在背景的任何新數據每30秒長週期即12小時。位置數據需要與此一起發送。

當前實施;

服務等級;

  1. 地點收聽者30秒其設定經度緯度&值以兩個局部變量
  2. 報警管理器火災未決意圖每30秒的廣播接收機的時間間隔。
  3. 廣播接收器使用位置變量在extras中啓動一個IntentService。
  4. IntentService http帖子位置並要求從服務器獲取任何新數據。
  5. IntentService通過廣播接收器將服務器響應發回主服務類。

    • 服務類starts_sticky確保由OS重新啓動。

我已經嘗試了幾種不同的變化;

  1. 我使用一個Handler嘗試和運行的處理時間機制,但是發佈到服務器上,postDelay時間從2分鐘就到7分鐘的時候,設備是睡着了。

  2. 此外,嘗試直接從警報管理器發射IntentService,但無法用最新的位置變量更改PendingIntent附加項。

問題;

  1. 目前的實施方式是怎樣的?

  2. 會下降谷歌的GCM路線會更有利嗎?

  3. 如何大力測試服務類別,特別是關於從操作系統中恢復的問題?

在此先感謝。

回答

1

爲避免操作系統終止服務,您必須通知用戶您的服務是持續服務,如http://developer.android.com/guide/components/services.html#Foreground中所述。

我設法使用AlarmManager和WakeLock在後臺每2分鐘運行一次服務,如this answer中所述。即使設備處於睡眠狀態,它也會每2分鐘運行一次。只需設置鬧鐘重複像

alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent); 

而不是將其設置爲一次。

相關問題