会员注册 | 登录 | 微信快捷登录 支付宝快捷登录 QQ登录 微博登录 | 帮助中心 人人文库renrendoc.com美如初恋!
站内搜索 百度文库

热门搜索: 直缝焊接机 矿井提升机 循环球式转向器图纸 机器人手爪发展史 管道机器人dwg 动平衡试验台设计

   首页 人人文库网 > 资源分类 > DOC文档下载

20认识so里的JNI_OnLoad()函数.doc

  • 资源星级:
  • 资源大小:41.00KB   全文页数:3页
  • 资源格式: DOC        下载权限:注册会员/VIP会员
您还没有登陆,请先登录。登陆后即可下载此文档。
  合作网站登录: 微信快捷登录 支付宝快捷登录   QQ登录   微博登录
友情提示
2:本站资源不支持迅雷下载,请使用浏览器直接下载(不支持QQ浏览器)
3:本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

20认识so里的JNI_OnLoad()函数.doc

20.认识.so里的JNI_OnLoad函数当Android的VMVirtualMachine执行到C组件即so文件里的System.loadLibrary函数时,首先会去执行C组件里的JNI_OnLoad函数。它的用途有二1.告诉VM此C组件使用那一个JNI版本。如果你的.so文件没有提供JNI_OnLoad函数,VM会默认该.so檔是使用最老的JNI1.1版本。由于新版的JNI做了许多扩充,如果需要使用JNI的新版功能,例如JNI1.4的java.nio.ByteBuffer,就必须藉由JNI_OnLoad函数来告知VM。2.由于VM执行到System.loadLibrary函数时,就会立即先呼叫JNI_OnLoad,所以C组件的开发者可以藉由JNI_OnLoad来进行C组件内的初期值之设定Initialization。例如,在Android的/system/lib/libmedia_jni.so档案里,就提供了JNI_OnLoad函数,其程序代码片段为//defineLOG_NDEBUG0defineLOG_TAGMediaPlayerJNIjintJNI_OnLoadJavaVMvm,voidreserved{JNIEnvenvNULLjintresult1ifvmGetEnvvoidenv,JNI_VERSION_1_4JNI_OK{LOGEERRORGetEnvfailed\ngotobail}assertenvNULLifregister_android_media_MediaPlayerenvGetEnvvoidenv,JNI_VERSION_1_4JNI_OK{LOGEERRORGetEnvfailed\ngotobail}由于VM通常是多执行绪Multithreading的执行环境。每一个执行绪在呼叫JNI_OnLoad时,所传递进来的JNIEnv指标值都是不同的。为了配合这种多执行绪的环境,C组件开发者在撰写本地函数时,可藉由JNIEnv指标值之不同而避免执行绪的数据冲突问题,才能确保所写的本地函数能安全地在Android的多执行绪VM里安全地执行。基于这个理由,当在呼叫C组件的函数时,都会将JNIEnv指标值传递给它,如下jintJNI_OnLoadJavaVMvm,voidreserved{JNIEnvenvNULL.ifregister_android_media_MediaPlayerenvMonitorEnterenv,objJNI_OK{}查看是否已经有其它执行绪进入此对象,如果没有,此执行绪就进入该对象里执行了。还有,也可撰写下述指令ifenvMonitorExitenv,objJNI_OK{}查看是否此执行绪正在此对象内执行,如果是,此执行绪就会立即离开。

注意事项

本文(20认识so里的JNI_OnLoad()函数.doc)为本站会员(baixue100)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网([email protected]),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

copyright@ 2015-2017 人人文库网网站版权所有
苏ICP备12009002号-5