gpt4 book ai didi

android - 在 Android 上没有 dispatch_main 的 libDispatch 服务于主队列

转载 作者:太空狗 更新时间:2023-10-29 14:18:46 24 4
gpt4 key购买 nike

我在 Android 平台上使用开源的 libDispatch (GCD)。因此,大多数复杂的耗时任务都是通过 NDK 完成的(我在其中使用 libDispatch)。

对于某些调用,我正在使用 dispatch_async(get_main_queue)...这就是问题所在...我能够在并发队列中运行任务,但不能在主队列中运行。因为这需要调用 dispatch_main() ,我们不能在这里做,因为在这种情况下 Java 线程将被阻塞。那么,是否可以在某个辅助线程上运行 Java UI 并 Hook dispatch_main() 以在此处为 dispatch_main_queue 提供服务?或者:我是否需要通过 JNI 从 JAva 主 UI 线程继续为 main_queue 提供服务?

最佳答案

查看 _dispatch_main_queue_callback_4CF,这是您可以调用以耗尽主队列的函数。它会在执行排队操作后像正常的明智函数一样返回,而不是像 dispatch_main 那样杀死线程。

请注意,您需要定期从 Java UI 线程调用 _dispatch_main_queue_callback_4CF,可能是每次迭代。官方 Cocoa 实现使用 _dispatch_queue_wakeup_main(),它使用 mach 消息将主线程踢出任何 sleep 状态,因此它可以保证快速调用回调函数,但您必须做一些工作才能启用它并构建您自己的 libDispatch 端口。实际上,在 Android 上,我不认为主 UI 线程会在您的应用程序处于 Activity 状态时进入休眠状态,因此这应该不是问题。

在 libDispatch 站点上有一个开放的工单,地址是 https://libdispatch.macosforge.org/trac/ticket/38使 _dispatch_main_queue_callback_4CF 成为公共(public)函数。票证标记为“已接受”,但没有说明是否/何时会发生。

关于android - 在 Android 上没有 dispatch_main 的 libDispatch 服务于主队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com