JNI/NDK开发指南(2)

本文探讨了Android应用中JNI的加载与卸载机制,包括动态库.so的存放位置及加载方式,.so文件中JNI_OnUnload函数的作用,以及JNIEnv在多线程环境中的作用。
1.生成动态库.so,存放于手机的system/lib/中(APP怎样将.so存入该文件夹,奇怪?????),Java层调用JNI的类会运行静态代码System.loadLibrary("***")将手机的system/lib文件夹中的动态库载入到VM。


2..so动态库里,C组件开发人员通过JNI_OnUnload()函数进行初始化。当然。老版的JNI是没有JNI_OnUnload()函数的,从而VM也能依据有无该函数推断JNI是新版or老版。


3.JNI_OnUnload()函数还能将.so提供的各个本地函数登记(如何的登记过程???)到VM里,以便能加快兴许呼叫本地函数的效率。

4.正如在加载.so时会马上呼叫JNI_OnLoad()来进行组件内的初始化;当VM释放该C组件时。也会呼叫JNI_OnUnload()函数来进行善后清除动作。

5.关于JNIEnv的个人理解:比如多个线程中创建了同一个类的对象,并调用对象的native方法,这时会向native方法传递一个參数JNIEnv,表明native方法方法所执行的环境即该native方法执行在哪个线程。

转载于:https://www.cnblogs.com/wzzkaifa/p/6895333.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值