Handler.postDelay 较长时间的任务可能不执行的问题

最近有个功能需求,要做一个延时任务

当时图简单,就直接用Handler.postDelay做了

结果测试发现一旦延时任务比较长,就无法执行了

原因分析

翻看了一下Handler的源码,原来问题出在这里:

Handler.sendMessageAtTime()
SystemClock.uptimeMillis()

原来Handler的延迟是基于SystemClock.uptimeMillis()计算的

而SystemClock.uptimeMillis()则是活跃时间,如果设备休眠了,就不算时间了,延时执行自然就继续往后延了

替代方案:

  • Timer.schedule(),简单方便

  • AlarmManager ,让系统定时提醒你(如果要想精确提醒,需要更多设置,甚至可能需要用户允许自启动)

 AlarmManager alarmMgr;
      PendingIntent alarmIntent;
      alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
      Intent intent = new Intent(action);
      alarmIntent =
          PendingIntent.getBroadcast(
              context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
      alarmMgr.set(AlarmManager.RTC, realRTCtime, alarmIntent);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。