关于Android的JNI开发SO库调java接口函数注意事项
来源:互联网 发布:windows刻录光盘 编辑:程序博客网 时间:2024/06/07 06:26
一般Android的JNI开发,都是单方面的JAVA调SO库的接口,就SO库倒过来调java的比较少,就算有也只是很简单的调一下,没有什么数据量,而我们不仅是java调SO,且SO也调java,且是大数据相互调用的,因为这个,我们碰到了不少问题。
因为网上有很多都说了java调SO的了,就不多说,就说一下SO调java的注意事项吧。
最主要的三点:
1.注意双方的临时对象的内存释放,不然会引起内存溢出,因为不仅是你的java程度在跑,SO库里面的C/C++程序也在跑。
2.java提拱接口函数的类,里面的全局对象,如果用到在接口函数中,那么,都要声明静态的,不然会出现比如只能调用几次就不能再调了奇怪现象,这只是其中之一。
3.SO库这边调用java这边接口函数时,如果这个函数带有返回值,且返回值是个引用类型值,如byte[]数组等,那么,这个返回值的引用类型值,必须是静态的。不然,在不断的SO库调java这个接口的过程中,会出现莫名其妙的问题。
比如我们公司,在开发时,测试USB的不断解包与发包是否稳定。其中解包与发包,都是由SO库那边控制调用,java这边提拱接口。而在接收包的数据时,SO调用java提拱的收包接口函数,SO库这边每调一次这个接口,就能得到一个byte[]类型的数据,但由于我这边返回这个byte[]不是静态的,USB的接包与发包过程,一般就两三分钟就出现了露包。
4.如果用到Handle,如果用到new Message(),使用Message.obtain()来代替,他们的区别是,new Message(0是无论什么情况下,都会创建一个新的Message实例,但Message.obtain()不一样,是调用当前Handle中空闲的Message,如果没有,则等待。这样就不会因为不断的new Message()而不断的耗内存。这就是有些应用因为进行不断的更新界面会让手机越来越卡,如果使用Handle是不断的new Message(),那么这必定是原因之一。
5.发现一个问题,我面试了好些个Android程序员了,他们对于java基础中的对象被回收这一块,都不注重,像本人面试时出的很简单一道题,竟然都没出现能全答对的,试问:就算你能做出一个很炫的App,如果这个App因为你无时无刻都在耗内存,导致应用运行不流畅甚至用户手机也不流畅,那么,你这App能好到哪去? 这是题:
A a=new A();
B b=new B();
a=b;
第一问:如果这时系统GC进行垃圾回收,那个new A()跟new B()那么哪一个会被回收,或者都不被回收,还是全部回收?(如果选的不是new A(),那么,去好好恶补一下吧)
第二问:代码下面再加一句:b=null;这时,请问new B()在系统GC回收时,会不会被回收?(觉得会的,那么也去恶补一下吧。)
- 关于Android的JNI开发SO库调java接口函数注意事项
- 《关于ndk jni开发和so文件的生成》
- android jni接口函数
- 关于android进行jni调用时.so文件的兼容问题
- Android jni开发 eclipse 删除额外添加的.so文件
- Android jni开发 eclipse 删除额外添加的.so文件
- android JNI-SO函数名隐藏
- Android Studio JNI 开发.so库
- eclipse android jni 开发,so库编译
- android - Jni 接口函数表
- android - JNI接口函数 (1)
- android - JNI接口函数 (2)
- android - JNI接口函数 (3)
- android - JNI接口函数 (2)
- android - JNI接口函数 (1)
- JNI调用java接口函数
- 关于JNI回调JAVA方法及其注意事项
- android ndk开发:JNI中怎的引用so动态库中的函数
- 查找 - 二分查找
- ios-day18-08(使用CABasicAnimation实现对UIView的平移、旋转、缩放)
- 两个byte[]数组合并
- Unique Paths - LeetCode
- MySQL数据库备份和还原的常用命令收集
- 关于Android的JNI开发SO库调java接口函数注意事项
- Ubuntu下编译webkit
- python输出不换行(同一行输出不同类型数据)
- sql 主要事项
- 【Spring】官网教程阅读笔记(七):验证Form表单
- FFmpeg分析基础一
- 关于filter拦截请求及chain.doFilter(request, response)的理解
- oracle基础:创建表和设置主键,修改属性等
- [省选前题目整理][BZOJ 2434][NOI 2011]阿狸的打字机(AC自动机+fail树+DFS序+树状数组)