2012-12-13 35 views
0

我在java中创建了一个线程,它执行了一些处理,使用JNI将数据传递给传统C++。 C++代码在单独的线程上执行一些任务,然后返回,此时我想从JNI回调到Java线程,而不是主接口线程。该代码似乎构建并运行没有错误,但是当调用CallVoidMethod来调用回Java时,没有任何事情发生,没有任何异常或错误,它似乎调用Java代码。在非UI线程上对Java的JNI回调

我打电话给AttachCurrentThread似乎工作和分离在结束时,找到方法的调用似乎都成功。有没有人有任何想法或我有错误的想法?

+1

在调用方法的开始处添加一条日志语句,以查看它是否被调用。确保在JNI代码中调用ExceptionCheck,以查看CallVoidMethod中的Java端是否失败。你说“什么事情都没有发生”,而且“似乎也调用了Java代码”,所以我不确定你看到了什么或者它是如何失败的。 – fadden

+0

如果你粘贴代码,我们可以建议你 – Suman

回答

2

有没有解决这个问题的灵丹妙药;你可能会遇到任何奇迹般的小事情。我建议直接用一些不起作用的代码开始。故意设置方法ID错误;看看系统的行为有什么不同。将对象引用(或类引用,如果它是静态方法)设置为意外的对象或不存在的对象;看看当对象引用没有全局化时会发生什么......你有这个想法。

+1

Upvote for全球化的对象引用 - 事实证明,如果我想保留对当前方法范围之外的对象或类的引用,我需要调用'NewGlobalReference()和线程。请参阅http://developer.android.com/training/articles/perf-jni.html#local_and_global_references关于此的良好指南。 – user149408