2
我正在寫一個數據記錄器應用程序,我需要每5分鐘完成一次http請求。用戶知道電池耗盡,這對我來說沒問題。我正在使用前臺服務和適當的通知,並且我有一個處理程序線程來讓我每5分鐘發佈一次可運行任務。看起來,當手機進入DOZE MODE模式時,線程被掛起,並且沒有可執行的程序被執行。這是正常的行爲還是我錯過了什麼? 任何幫助如何做到這一點將不勝感激。打盹模式暫停前臺服務
private void startTheForegroundService() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainService.this);
builder.setPriority(Notification.PRIORITY_HIGH);
startForeground(1000, builder.build());
httpThread = new HttpThread("Ping Thread", Thread.NORM_PRIORITY);
httpThread.start();
httpThread.loop();
}
線程代碼:
啓動線程服務代碼
public class HttpThread extends HandlerThread {
public Handler mHandler;
public HttpThread(String name, int priority) {
super(name, priority);
}
public synchronized void waitUntilReady() {
mHandler = new Handler(getLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
return false;
}
});
}
public void loop() {
waitUntilReady();
mHandler.post(new Runnable(){
@Override
public void run() {
//code for the http request.
}
});
}
}
我已將應用列入白名單。當音樂流媒體應用程序(前臺服務)在設備處於打盹模式時繼續獲取數據?我的處理程序根本不觸發。 –
@GiorgosOikonomou:「我將應用列入白名單」 - 嗯......「當音樂流媒體應用(前臺服務)在設備處於打盹模式時繼續獲取數據?」 - 我沒有在充電器上運行Android 6.0的一個小時以上的流媒體音樂應用程序。也許Android處理音頻焦點的應用程序的方式不同。 「我的處理程序完全沒有觸發」 - 你確定服務沒有被停止?你也可以考慮'ScheduledExecutorService'而不是基於'Handler'的方法,看看你是否有更好的運氣。 – CommonsWare
ScheduledExecutorService作業一旦從多任務選項卡中清除應用程序就停止工作(多任務 - >殺應用程序) –