我的智慧结束了这个问题。无法找到一个好的解决方案!在我的应用程序中,我有一个服务,在其中计时器被反复安排。这意味着在执行每个timerTask之后,启动另一个timerTask(首先,取消定时器和timerTask,然后分配一个新的Timer和TimerTask)。这是一天24小时完成的!我需要这个:首先启动应用程序,启动服务,然后关闭显示器并让设备独立。但麻烦是每次我回到设备,我发现我的应用程序已完成一些任务然后卡在计时器,虽然它的时间间隔通过!我认为这是因为CPU睡眠。
有关更多说明,假设我有一个以秒为单位的时间间隔列表:{60,100,40,120,80}。我开始服务并将设备单独放置5分钟。然后我回来看看60和100秒的任务完成了。但是这项服务停留在40岁的任务!
每个任务都包含一个非常简单的网络作业,最多需要5秒。 我尝试了一个唤醒锁,但它没有帮助。我不知道为什么!
以下是我的服务代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(id, new Notification());
pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,"");
wl.acquire();
doAction();
return START_STICKY;
}
private void doAction(){
if (timer != null)
timer.cancel;
if (timerTask != null)
timerTask.cancel;
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
doAction();
//Do some network job!
}
};
timer.schedule(timerTask, getNewInterval());
}
答案 0 :(得分:1)
您不应该保留唤醒锁,因此可能会有一些电源管理系统功能会导致您的服务失效。阅读文档:
和
并查看第一个选项或第二个选项是否与IntentService相结合无法满足您的要求。您可以在AlarmManager
被其他时刻(甚至是setExact()