我需要定期在后台运行任务,并保持 CPU 唤醒。根据 Android文档,我为此使用了PARTIAL_WAKE_LOCK 。为了测试唤醒锁,我编写了一个 Service,它使用ScheduledThreadPoolExecutor每 2 分钟启动一个线程。该线程只是在 sdcard 中的日志文件上写入一个字符串。
然后,我执行了以下简单测试:运行应用程序并拔下设备的电源。在正确执行 2 或 3 小时后,Service 停止运行线程,并且日志文件中没有写入新字符串。
服务代码:
@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!");
}
我希望当显示器关闭时线程也会执行,但查看我的日志文件似乎并非如此。我哪里错了?