关于native层回调java层

1、关于jni调用种种情形的分析,可以参考一下如下网址中的文章:http://android.wooyd.org/JNIExample/

2、native层回调java层:
   native层没有自己的线程,只是在java调用native代码,native代码的某个位置,需要回访java层的代码以实现某些功能,这种情况比较简单,网上绝大多数讨论的都是这方面的。
   native层建立了自己的线程,在线程中需要回访java层,这时候,native线程通过jvm获取JNIEnv时,不能成功。
   原因分析:android 源码中的文档: platform\dalvik\docs\jni-tips.html 中有一段:FindClass didn't find my class 对此做了分析。
   通过网上的资料,发现native线程通过jvm获取JNIEnv时,和普通的jni函数不一致,需要将线程attach到jvm才可以。可以通过 AttachCurrentThread 来获取 JNIEnv,实际上这个函数的功能不只是获取JNIEnv这么简单,其主要作用是将线程绑定到jvm,这实际上会导致native线程不结束,jvm就不会结束。关于这个问题,可以参考《JNI_OnLoad 的非預期現象 》:http://www.360doc.com/showWeb/0/0/114075885.aspx

3、关于多线程jni回调java,google groups中有如下讨论
http://groups.google.com/group/android-ndk/browse_thread/thread/f40a3ec8413e8b77/534f2ef35b802e08
已被转载备份到如下地址:
http://www.360doc.com/showWeb/0/0/114078345.aspx
4、有一篇文档《多線程的JNI Native   》: http://www.docin.com/p-104345715.html  也对这方面有演示例子
4、关于native to java 的回调机制有如下讨论:
http://groups.google.com/group/android-ndk/browse_thread/thread/618ff83dd88694b
已被转载备份到:http://www.360doc.com/showWeb/0/0/114084161.aspx



5、jvm->getEnv,在不同的线程中运行时,获得的值应该是不一致的。导致了上述的问题。

6、sun官网文档:http://java.sun.com/docs/books/jni/html/functions.html
   有对这方面的函数的描述

 

转载于:https://my.oschina.net/zhuzihasablog/blog/118714

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值