バックグラウンドでタスクを定期的に実行し、CPU を起動しておく必要があります。Android のドキュメントによると、この目的のためにPARTIAL_WAKE_LOCKを使用しました。ウェイク ロックをテストするために、ScheduledThreadPoolExecutorを使用して 2 分ごとにスレッドを開始する Service を作成しました。このスレッドは、sdcard のログ ファイルに文字列を書き込むだけです。
次に、次の簡単なテストを実行しました。アプリケーションを実行し、デバイスを電源から外します。2 ~ 3 時間の正常な実行の後、サービスはスレッドの実行を停止し、新しい文字列はログ ファイルに書き込まれません。
サービスのコード:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Service onStartCommand");
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiOpp wakeLock");
wakeLock.acquire();
TestTask testTask = new TestTask(getApplicationContext());
ScheduledThreadPoolExecutor monitorPool = new ScheduledThreadPoolExecutor(1);
monitorPool.scheduleAtFixedRate(testTask, 0, 120, TimeUnit.SECONDS);
return START_STICKY;
}
TestTask のコード:
@Override
public void run() {
//write on log file
LogManager.getInstance().logData("I am running!");
}
ディスプレイがオフになっているときにもスレッドが実行されると思いますが、ログファイルを見るとそうではないようです。どこが間違っていますか?