我在 Android 平台上使用 libDispatch (GCD) 开源。因此,大多数复杂耗时的任务都是通过 NDK 完成的(我使用的是 libDispatch)。
我正在使用函数 RunOnMainQueueDelayed 在 MainQueue 上安排一些延迟的任务。为了运行主队列任务,我在 java 端运行了一个 15 毫秒的定时器,每当定时器到期时,我运行一个 JNI 调用,它将在本机端运行函数 _dispatch_main_queue_callback_4CF 以便执行主队列上的任务。
现在我面临的问题是,如果我在主队列中提供小于~15ms 的延迟,那么任务就会被执行。但是,如果延迟超过 15 毫秒,或者任务在至少一个任务执行后被调度到队列中,那么所有任务都不会被执行。
我无法理解 MainQueue 出现这种奇怪行为的原因。我试图调试 libdispatch 的代码,但找不到原因。
有人请 mainQueue 是如何工作的,这个问题的原因可能是什么。