当我将postDelayed时间设置为25天以上时,Runnable会在毫秒内连续被调用

时间:2019-03-22 05:47:04

标签: android runnable

当我设置postDelayed间隔超过25天时,Runnable在毫秒内连续被调用。它不会在25天后调用可运行对象,但会由于应用程序崩溃而每10毫秒调用一次。我正在此运行中进行网络操作。帖子延迟时间有最大限制吗?

mHandler.postDelayed(runnable, 600 * 60 * 60 * 1000);

1 个答案:

答案 0 :(得分:2)

您的数学运算使用32位带符号整数,并且会发生溢出。

600 * 60 * 60 * 10000x80befc00,它是一个负整数,提升为long时保持负数。以负延迟调用postDelayed()表示“立即”,默认设置为Handler则表示下一个垂直同步(每16毫秒一次,刷新频率为60Hz)。

要解决数学问题,请将操作数之一更改为long以使用64位整数,例如600 * 60 * 60 * 1000L

无论如何,Handler#postDelayed()并不真正适合于此类长期运行的任务。考虑例如WorkManager