![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jni
文章平均质量分 68
Alex_MaHao
这个作者很懒,什么都没留下…
展开
-
JNI的三种引用
局部引用通过NewLocalRef和各种JNI接口创建(FindClass、NewObject、GetObjectClass和NewCharArray等)。会阻止GC回收所引用的对象。函数返回后,局部引用所引用的对象(如果Java层没有对返回的局部引用使用)会被JVM自动释放,或调用DeleteLocalRef释放。(*env)->DeleteLocalRef(env,local_ref)jclass cls_string = (*env)->FindClass(env, "java/la原创 2022-03-21 11:50:52 · 804 阅读 · 0 评论 -
Android jni 集成 Address Sanitizer
Address Sanitizer该工具是google开源,用于对c++中的代码进行质量检测。具体介绍:https://developer.android.google.cn/ndk/guides/asan?hl=zh_cn按照官方的文档集成,会遇到一些问题,比如对应so找不到等。所以踩了一些坑。记录一下。集成整体思路如下:对于debug版本,集成Address Sanitizer,便于在开发期间发现问题。对于release版本,不进行集成,并避免对应的一些so添加到release中去。将对原创 2020-05-27 10:59:43 · 1176 阅读 · 0 评论 -
Android 如何在jni层使用Looper
概述假设现在有这样一个需求:在c++层进行定时任务,然后任务回调到主线程运行。对于在java层通过handler.postDelay()就可以实现。而在c层呢?两种思路:通过jni反调java层的handler方法做处理。在jni层获取到对应c++主线程的looper,然后进行处理第一种方式实现上很简单。第二种方式google提供了jni层对应的库,地址https://develop...原创 2020-04-28 18:13:56 · 2064 阅读 · 2 评论 -
Android jni 线程同步
概述android中可以通过jni调用native的方法,那么如果在java中存在多个线程调用native的方法,它的展现形式是如何呢?先说结论:native的默认执行与java调用的线程保持一致,即处于同一个线程中。其次,如果多个线程调用native方法,也存在线程不安全的情况,需要解决。问题示例c++层提供两个native方法,分别是add和getint i = 0;exte...原创 2020-04-19 13:58:02 · 787 阅读 · 0 评论