Android开发之JNI(一)——概述

这是在读书过程中的总结,相当于学习笔记吧。一方面总结知识有个记录以后查找方便。《深入理解Android卷1》

0、JNI是什么?

  • Java Native Interface 即 “Java本地调用”

1、JNI技术,可以做到什么?

  • Java程序中的函数可以调用Native语言写的函数,即:可以调用C/C++编写的函数。
  • Native函数中可以调用Java层的函数,即:在C/C++程序中调用Java的函数。

2、在平台无关的Java中,为什么要创建一个与Native相关的JNI 技术呢?这不是破坏了Java中的平台无关性吗?

  • JVM是用Native语言写的,而JVM又运行在具体平台之上,所以JVM它本身无法做到平台无关。有了JNI技术后就可以对Java层屏蔽不同操作系统平台之间的差异了(在Windows和Linux之,在打开文件时,Windows上的API是OpenFile函数,Linux是open函数)。这样就能实现Java本身的平台无关特性了。
  • 在Java语言诞生前,很多程序都是用Native语言写的,有很多已经是Native实现的功能模块了,为了避免重复的制造轮子,通过Java中的JNI直接调用就行。同时,在一些要求效率和速度的场合还是需要Native语言写的程序的。

Java、JNI、Native示意图

其实:在Android平台上写程序没有了JNI的支持,我们将寸步难行。

3、在Android 平台上,JNI在Java和Native之间的作用是什么呢?
4、为深埋JNI层必须实现为动态库的形式?为什么这样Java 虚拟机才会加载它并调用它的函数。
5、java中,如何加载JNI库,native函数。
6、动态库是什么?
7、在什么时候、什么地方加载这个库?如何加载JNI库呢?
8、如何声明两个由JNI层来实现的native函数?
9、如何知道java层的native_init函数对应的是JNI层的
android_media_MediaScanner_native_init函数呢?
10、JNI函数的两种注册方法?
1、静态方法注册有什么弊端?
2、如何克服上述弊端:动态注册——JNINativeMethod。
11、静态方法中native函数是如何找到对应的JNI函数的?
12、存放 Java native 和 JNI 对应关系的结构体:JNINativeMethod
13、如何使用这个结构体?
14、动态注册函数在什么时候和什么地方被调用?
15、JNI其它重要部分:
1、Java世界和native世界的基本数据类型的转换。
2、引用数据类型的转换
16、如果对象类型在native中都用jobject表示的话,那么该如何使用和操作他们呢?
17、JNIEnv是什么?
18、它用来干嘛的?
19、该如何操作jobject对象呢?
20、为什么要将scanFile和handleStringTag 存起来?存起来之后,又怎么用呢?
21、如何通过JNIEnv操作jobject的成员函数?
如何通过就fieldId操作jobject的成员变量?
22、为什么需要这个签名信息呢?
23、JNI技术提供的三种类型的引用,分别是什么?
24、JNI中的异常处理方式。
25、垃圾回首在JNI层中的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值