JNI(Java Native Interface),通过这种技术可以做到两点:
1)Java程序中的函数可以调用Native语言写的函数,Native一般指的是C/C++编写的函数。
2)Native程序中的函数可以调用Java层的函数(C/C++程序可以调用Java的函数)
有了JNI技术,可以对Java层屏蔽不同操作系统平台之间的差异(如Windows和Linux),但是Java的运行速度不及Native。
JNI层以动态库的形式实现,这样Java 虚拟机会在调用JNI的函数前进行加载。
实例分析:MediaScanner
(MediaScanner是Android平台中多媒体系统的重要组成部分,其功能是扫描媒体文件,得到如歌曲时长、歌曲作者等媒体信息,并将它们存入到媒体数据库中,供其他应用程序使用)
重点:
1)先加载对应的JNI库:在调用相关native函数前,动态加载对应的JNI库。调用System.loadLibrary("media_jni");其中media_jni是动态库的名字,系统会自动根据不同的平台拓展成真是的动态库文件名,在Linux上拓展成libmedia_jni.so,在Windows上拓展成media_jni.dll。
2)声明由关键字native修饰的函数:用关键字native来声明native_init和processFile函数,表示这两个函数将由JNI层来实现。