【发布时间】:2015-08-29 09:26:18
【问题描述】:
我对 jni 还很陌生。
我需要从 java 代码调用一个本地方法,它应该异步执行一个耗时的操作(在另一个线程中),最后它应该调用一个 java 回调。但是,我需要在发起操作的同一 java 线程中调用此回调。也就是说,java应用应该是单线程的,所有的回调都应该在这个线程的上下文中调用。
我已经阅读了关于回调调用的教程,关于保持对象的全局引用、获取适当的 methodid 并调用它的内容。
我还找到了有关如何从另一个线程 (AttachCurrentThread) 调用 java 方法的内容,但这不是我需要的。我需要在原始线程中进行 java 调用,所以问题是如何切换到该线程?
例如,在 Win32 中,我会使用 PostMessage/PostThreadMessage 之类的东西来调用指定线程中的代码,假设它运行消息循环。如果线程等待处于可警报状态的事件,还有其他替代方法,例如 QueueUserAPC。
那么,我可以使用哪些选项?是否有用于在指定线程中发布 java 方法执行的 jni 方法?或者也许是相当于PostThreadMessage的Linux?我也可以在 java 代码中考虑解决方法,但更喜欢在本机端解决这个问题。
提前致谢。
【问题讨论】:
-
发送
Message给Handler,然后让handleMessage调用回调怎么样?如果在构造Handler时未指定Looper,则Handler应与应用程序的主线程Looper关联。 -
@Michael - 听起来很合理,问题是我也是 android/java 的初学者。我听说过
Message和Handler,但不知道如何处理。一定会检查这个,谢谢。
标签: android c++ multithreading java-native-interface