更改Android系统时钟会停止计时器.我该如何重新启动它们?

更改Android系统时钟会停止计时器.我该如何重新启动它们?,第1张

概述我需要在 Android应用程序中运行定期任务.我目前使用这样的计时器: final Handler guiHandler = new Handler();// the task to runfinal Runnable myRunnable = new Runnable() { @Override public void run() { doMyStuff 我需要在 Android应用程序中运行定期任务.我目前使用这样的计时器:
final Handler guiHandler = new Handler();// the task to runfinal Runnable myRunnable = new Runnable() {    @OverrIDe    public voID run() {        doMyStuff();    }};Timer timer = new Timer();timer.schedule(new TimerTask() {    @OverrIDe    public voID run() {        guiHandler.post(myRunnable);    }},30000); // run every 30 seconds

这正是我所需要的,但是有一个问题:如果我改变模拟器或手机上的时间,计时器就会停止运行.这是我更改时间时出现在日志中的内容:

D/SystemClock(  331): Setting time of day to sec=1278920137W/SystemClock(  331): Unable to set rtc to 1278920137: InvalID argument

没有关于计时器被中断的事情,但是在系统时钟改变之后它显然不再运行.只要应用程序正在运行,我就需要让任务始终保持运行.

如果它像这样停止,我该如何重新启动计时器? Timer或TimerTask上没有方法来检查它是否正在运行,所以我不知道何时重新安排它.有任何想法吗?

解决方法 我认为有几种方法可以做到这一点.在任何一种情况下我都不会使用计时器.

您可以使用处理程序在postDelayed调用中运行任务.然后,您的任务必须从内部重新注册处理程序.

final int ONE_SECOND = 1000; // one secondfinal Handler handler = new Handler();handler.postDelayed(new Runnable() {   public voID run() {      ... // do some stuff      if (Expression) {         handler.postDelayed(this,ONE_SECOND);      }   }},ONE_SECOND);

这将使您的应用程序处于活动状态时运行任务.您还可以在Runnable中的postDelayed中调整延迟率.只要你制作另一个Looper,这种方式是半可预测的.根据任务的不同,使用主线程可能适合也可能不适合.

还有一个AlarmManager,您可以通过Context接口访问,该接口用于以更精确的间隔重复执行任务.它使用起来有点复杂,但您可以灵活地使用RTC和持久的可重复任务.

AlarmManager manager = mContext.getSystemService(Context.ALARM_SERVICE);manager.setRepeating(AlarmManager.RTC,<start_time_millis>,<period_millis>,pendingIntent);

例如,待定意图可以触发您可以在其他地方收听的广播意图.您可以在自定义Application对象的onCreate中创建此pendingintent,并取消onTerminate()中的intent.

总结

以上是内存溢出为你收集整理的更改Android系统时钟会停止计时器.我该如何重新启动它们?全部内容,希望文章能够帮你解决更改Android系统时钟会停止计时器.我该如何重新启动它们?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1136082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存