1. NewGlobalRef(创建全局引用)

jobjectNewGlobalRef(JNIEnv *env, jobject obj);

创建 obj 参数所引用对象的新全局引用。obj 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteGlobalRef() 来显式撤消。

参数:

env:JNI 接口指针。

obj:全局或局部引用。

返回值:

返回全局引用。如果系统内存不足则返回 NULL

2. DeleteGlobalRef(删除全局引用)

void DeleteGlobalRef(JNIEnv *env, jobject globalRef);

删除 globalRef 所指向的全局引用。

参数:

env:JNI 接口指针。

globalRef:全局引用。

3. NewLocalRef(创建局部引用)

jobject NewLocalRef(JNIEnv *env, jobject ref); 

创建 obj 参数所引用对象的新局部引用。ref 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteLocalRef() 来显式撤消。

参数:

env:JNI 接口指针。

ref:全局或局部引用。

返回值:

返回局部引用。如果系统内存不足则返回 NULL

4. DeleteLocalRef(删除局部引用)

void DeleteLocalRef(JNIEnv *env, jobject localRef);

删除 localRef所指向的局部引用。

参数:

env:JNI 接口指针。

localRef:局部引用。

5. EnsureLocalCapacity(确保局部引用的容量)

jint EnsureLocalCapacity(JNIEnv *env, jint capacity); 

确保至少给定数量的局部引用能在当前线程被创建。如果创建成功就返回0,否则就会返回一个负数并且抛出OutOfMemoryError异常。

当naitve方法开始运行时,VM会自动保证至少16个局部引用能被创建。

为了兼容,VM会分配超过声明的局部引用数量的内存。

6. NewWeakGlobalRef(创建全局弱引用)

jweak NewWeakGlobalRef(JNIEnv *env, jobject obj); 

创建 obj 参数所引用对象的新全局弱引用。ref 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteWeakGlobalRef() 来显式撤消。

参数:

env:JNI 接口指针。

obj:全局或局部弱引用。

返回值:

返回局部引用。如果系统内存不足则返回 NULL

7. DeleteWeakGlobalRef(删除全局弱引用)

void DeleteWeakGlobalRef(JNIEnv *env, jweak obj);

删除 obj 所指向的全局弱引用。

参数:

env:JNI 接口指针。

obj:全局弱引用。

Android JNI 学习(五):References Api的更多相关文章

  1. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  3. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  4. Android JNI学习(二)——实战JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  5. Android JNI 学习(一):JNI 简介

    JNI 即 Java Native Interface 是 native 编程接口,它允许在Java虚拟机(VM)内运行Java代码与其他编程语言(主要是C和C++)编写的应用程序和库进行交互操作. ...

  6. Android JNI 学习(十一):Invocation Api

    1. 简介 Invocation API允许软件提供商在原生程序中内嵌Java虚拟机.因此可以不需要链接任何Java虚拟机代码来提供Java-enabled的应用程序. 以下代码演示如何使用: #in ...

  7. Android JNI 学习(十):String Operations Api & Other Apis

    一.String Operations(字符串操作) 1. NewString jstring NewString(JNIEnv *env, const jchar *unicodeChars, js ...

  8. Android JNI 学习(六):Object Operations Api

    一.AllocObject jobjectAllocObject(JNIEnv *env, jclass clazz); 分配新 Java 对象而不调用该对象的任何构造函数.返回该对象的引用. cla ...

  9. Android JNI 学习(四):接口方法表 & Base Api & Exception Api

    本文我们来总结一下JNI 提供的功能列表及相关的函数表. 注意:请注意使用术语“必须”来描述对JNI程序员的限制.例如,当您看到某个JNI函数必须接收非NULL对象时,您有责任确保不将NULL传递给该 ...

随机推荐

  1. Ocelot的学习

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.认证.鉴权.简单缓存.限流熔断.负载均衡器等.简单的来说Ocelot是一堆的asp.net core midd ...

  2. Oracle--通配符、Escape转义字符、模糊查询语句

    一.通配符通配符描述示例      %:匹配包含零个或更多字符的任意字符串.WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名. ...

  3. n的m划分 整数拆分问题

    n的m划分 将n划分成若干个不超过m的数(正整数)的和,问有几种划分情况. 现在根据n和m的关系,考虑下面几种情况: 当n=1时,不论m的值为多少,只有一种划分,即{1}: 当m=1时,不论n的值为多 ...

  4. [精华][推荐]CAS SSO单点登录服务端客户端学习

    1.通过下载稳定版本的方式下载cas的相关源码包,如下: 直接选择4.2.1的稳定代码即可 2.我们项目中的版本版本使用maven apereo远程库去下载 通过远程maven库下载cas-serve ...

  5. PackageManagerService 学习记录 基于7.1.1源码

    参考: http://blog.csdn.net/innost/article/details/47253179 http://blog.csdn.net/gaugamela/article/deta ...

  6. [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应

    随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s.所以在查询数据的时候,程序会出现 “超时时间已到.在操作完成之前超时时间已过或服务器未 ...

  7. 异步async与await的简单探究

    在学习.net core的过程中,到处见到异步的使用,Task.async.await随处可见.有点疑惑,就去了解了下这个过程是怎样的. 下面是一段代码,去看看是怎么执行的吧. 一.看看异步执行的方式 ...

  8. java多线程中注入Spring对象问题

    web应用中java多线程并发处理业务时,容易抛出NullPointerException. 原因: 线程中的Spring Bean没有被注入.web容器在启动时,没有提前将线程中的bean注入,在线 ...

  9. sequence测试中的使用

    1. create sequence : create sequence TEST_SEQUENCE minvalue 1 maxvalue 1000000000 start with 1 incre ...

  10. Linux 第十六天

    十六.服务管理 1.服务分类 1)RPM包默认安装的服务:包括独立的服务.基于xinetd的服务 2)源码包安装的服务 3)RPM安装服务和源码包安装服务的区别就是安装位置的不同 >源码包安装在 ...