首页
社区
课程
招聘
[求助]动态库JNI_OnUnload函数不调用的问题
2015-9-28 09:28 9922

[求助]动态库JNI_OnUnload函数不调用的问题

2015-9-28 09:28
9922
在使用NDK编写一个动态链接库的时候,测试发现。安卓系统System.loadLibrary ("TestJNI")就是载入动态库,默认调用编写的JNI_Onload().但是退出app的时候发现不会调用JNI_OnUnload() 函数。
资料上是这么解释的:
在载入C组件时会立即呼叫JNI_OnLoad()来进行组件内的初期动作;
而当VM释放该C组件时,则会呼叫JNI_OnUnload()函数来进行善后清除动作。
可是好像JNI_OnUnload函数并没有触发。
请问如何触发这个函数。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 250
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
OnlyEnd 2015-9-29 11:05
2
0
因为JVM一直没有退出。自然调不到JNI_OnUnload了。
System.runFinalizersOnExit() 这个函数能触发JNI_OnUnload,但是不安全,可能会清除掉一些别的线程正在处理的对象,导致死锁等
雪    币: 11
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
siliconlee 2015-10-8 08:53
3
0
谢谢,这和我的想法不一样啊。我以前以为,程序进去就调用动态库,程序退出就退出动态库。感觉好变扭,不得不去适应啊。
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风大叔 2015-10-10 14:16
4
0
程序已经退出了,进程都没了,内存也就自动释放了,所以不需要调用 JNI_OnUnload 了。。。

http://bleaklow.com/2006/02/18/jni_onunload_mostly_useless.html
游客
登录 | 注册 方可回帖
返回