美文网首页Android开发经验谈Android技术知识Android开发
Handler.postDelay 较长时间的任务可能不执行的问

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

作者: 十个雨点 | 来源:发表于2020-06-30 09:06 被阅读0次

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

    当时图简单,就直接用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);
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/xiezfktx.html