滴滴面试的时候问到了这个问题,在巴掌神的demo帮助下,估计想考的就是这个吧,ps面试官不说答案逼都让他装了0.-,建议当面试官的朋友们最好准备一下答案比较好,在面试的时候给予被面试者帮助,面试不仅是一次求职体验,也是一次技术交流嘛,好了言归正传。
当代码执行到postDelayed里面的run的时候 log 是 3150 毫秒;
该方法按照代码上示意应该是 上一个runnable执行之后再延时1毫秒执行,应该是4000+毫秒才对(之力说的计时是否准确应该是相对准确,因为执行代码需要花时间的),但是输出结果是3150毫秒,那就说明你设定的延时任务其实是不准确的,上图红色字标注说明了原因,下面将结合源码得出结论。
以下android framwork 源码均为api 25
我们看一下Handler类postDelayed方法调用了sendMessageDelayed方法的源码
这里可以发现调用postDelayed的时候要执行延时方法的时间就已经被算好了
我们再来看到MessageQueue类的next方法