2013-05-07 42 views
0

我有正在運行作爲前臺服務的Android服務startforeground的LocationManager requestLocationUpdates當設備處於睡眠狀態

startForeground(1234, notification); 

在這項服務,我有一個應該運行,每15分鐘可運行的服務:

private Runnable runnable = new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     Log.d("maw", "Gps::run"); 
     if (Constants.checkInternet(getApplicationContext())) checkSheet(); 
     handler.postDelayed(this, Constants.REFRESH_TIME); 
    } 
}; 

當設備連接到internt時,它執行方法checkSheet()。 此方法用服務器檢查某些內容,並根據結果啓動GPS並跟蹤設備的位置。

locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIME, GPS_DISTANCE, this); 

現在...在我們的測試中,這一切似乎工作正常。但是用戶有問題,有時他們只能在應該開始記錄之後的幾個小時內看到它們。

現在問題是背後的原因是什麼。 我猜他們不使用他們的設備不亞於我們的設備和裝置進入休眠模式我們的測試設備不會進入,因爲我們使用的設備更加頻繁

一些問題: 對於前臺服務: - 當設備進入某種深度睡眠模式時,Runnable每15分鐘停止一次嗎? - 當設備處於某種深度睡眠模式時,是否無法初始化locationManager.requestLocationUpdates?

+0

爲什麼不使用喚醒鎖? [PowerManager.WakeLock](http://developer.android.com/reference/android/os/PowerManager.WakeLock.html) – Utisevalec 2013-05-07 13:47:48

+0

您應該接受您的回答 – 2013-07-13 21:05:03

回答

1

嘗試使用AlarmManager,因此您的服務只有在實際工作時才需要在內存中。 或者您可以使用wakelock

+0

服務實際上幾乎一直在運轉。服務每15分鐘做一次。 檢查GPS是否應該啓用,並啓用它只是1件事。 – Knarf 2013-05-07 14:50:28

0

經過大量測試,似乎runnable有時會崩潰並完全停止工作。

現在解決了這個問題之後,似乎對於前臺服務來說,Runnable不會繼續運行,並且locationManager.requestLocationUpdates確實會做它應該做的事情。

相關問題