周期性timertask在Android从睡眠状态返回后一次执行多次]

问题描述 投票:0回答:1
我已实施了一项后台服务来定期更新我的应用程序中的数据。如果我的android设备已打开,但该机制运行良好,但在Android处于睡眠模式时会导致问题:

让我们想象一下,该服务每15分钟运行一次,然后Android进入睡眠状态1个小时,当再次虚弱时,该服务将一次执行4次。如果由于睡眠而错过了1个或多个周期,则首选的行为将仅运行一次服务。

要定期运行我的代码,我正在使用TimerTask:

public class updateService extends IntentService { public int onStartCommand(@Nullable Intent intent, int flags, int startId) { if(mTimer != null) { mTimer.cancel(); } mTimer = new Timer(); int timer = getPreference("refresh_interval") * 1000; mTimer.scheduleAtFixedRate(new updateTask (), timer, timer); return super.onStartCommand(intent, flags, startId); } class updateTask extends TimerTask { @Override public void run() { // run on another thread mHandler.post(new Runnable() { @Override public void run() { // Do job } }); } } }

我将对如何做得更好的任何建议表示感谢。谢谢!

我已实施了一项后台服务来定期更新我的应用程序中的数据。如果我的android设备已打开,但该机制运行良好,但是在Android处于睡眠模式时会导致问题:让我们想象一下...

java android service timer sleep
1个回答
0
投票
您正在使用Timer.scheduleAtFixedRate(TimerTask task, long delay, long period),它在其文档中进行了解释:

0
投票
如果执行由于任何原因(例如垃圾回收或其他后台活动)而延迟执行,则随后的执行也会延迟。他是对的
© www.soinside.com 2019 - 2024. All rights reserved.