2014-01-24 58 views
2

我正在使用Android的AlarmManager,並使用elapsed_time_wakeup爲每一分鐘安排重複警報。此警報觸發服務。在android中每分鐘啓動一次服務的最佳做法是什麼?

服務完成其工作(ping服務器(本例中是Facebook服務器)以獲取數據)。接下來我調用onDestroy()服務。所以每一分鐘服務開始 - >是否工作 - > onDestroy()

是在android中做到這一點的最佳方式?

+2

獲取服務器更改通知的最佳方式是使用[GCM](http://developer.android.com/google/gcm/index.html),因此您不必保留設備清醒和混亂的電池。 – zapl

+0

是的。但是,如果我要在電話上做到這一點。這是最好的方法嗎? – Zer0

+1

如果那是你必須做的,是的。一個簡單的intent服務不需要處理ondestroy,它只是在處理完縮進後關閉。 – zapl

回答

1

你真的需要每分鐘一新的服務嗎?我想你想開始單一服務。該服務每分鐘檢查一次服務器並以某種方式報告成功或錯誤?您希望簡單的始終以定期行動運行服務,而不是定期啓動服務。在這種情況下,啓動新服務會消耗比檢查本身更多的資源。

只要確保服務保持運行。直到你從它調用stopSelf()並且開始活動並沒有停止它,情況可能是這樣。你可能想要運行它

private ping() { 
    // periodic action here. 
    scheduleNext(); 
} 

private scheduleNext() { 
    mHandler.postDelayed(new Runnable() { 
    public void run() { ping(); } 
    }, 60000); 
} 

int onStartCommand(Intent intent, int x, int y) { 
    mHandler = new android.os.Handler(); 
    ping(); 
    return STICKY; 
} 

您可能只想定期檢查Wifi連接或連接存在。也許停止檢查,當你已經知道問題並正在解決它。您可能想要使用Service中的startForeground()來啓動一些活動來控制它並顯示結果。

相關問題