美文网首页Android Jni开发专栏
Android JNI开发详解(7)-线程操作,异常处理

Android JNI开发详解(7)-线程操作,异常处理

作者: ccbuluo | 来源:发表于2020-05-24 15:33 被阅读0次

原文出处:http://www.ccbu.cc/index.php/android/android-jni-thread-exception.html

线程操作

JNIEnv指针仅在创建它的线程有效。C/C++创建的线程默认是没有附加到JVM的,如果我们需要在本地线程线程访问JVM,那么必须先调用AttachCurrentThread将当前线程与JVM进行关联,然后才能获得JNIEnv对象。线程退出或不再需要使用JNIEnv时,我们必须通过调用DetachCurrentThread来解除连接,否则可能会导致线程不能正常退出或程序奔溃等问题。

函数 说明
AttachCurrentThread 将当前线程附件到JVM
DetachCurrentThread 解除当前线程与JVM的连接

Java中访问native方法并没有线程限制,所以我们的本地代码并不一定只会运行在main线程中 ,同时本地C/C++也可用创建子线程,在多线程的情况下,就不得不考虑 线程同步问题了。 Java中,JDK为我们提供了synchronized来处理多线程同步代码块 ,相应的在JNI中也提供了两个函数来完成线程同步。

函数 说明
MonitorEnter 进入临界区
MonitorExit 退出临界区

异常处理

C++中可以使用其内部的异常机制,但是这套机制抛出的异常并不会传递给我们的JVM,所以为了你补这个缺点,JNI实现了一套可以和JVM进行交流的异常机制 。

函数 说明
Throw 抛出已有的异常对象
ThrowNew 抛出一个新异常对象
ExceptionOccurred 获取JVM抛出的异常
ExceptionDescribe 输出错误日志
ExceptionClear 清空异常信息
FatalError 产生一个严重的错误
ExceptionCheck 检查是否存在异常信息

相关文章

  • Android JNI开发详解(7)-线程操作,异常处理

    原文出处:http://www.ccbu.cc/index.php/android/android-jni-thr...

  • Android JNI开发详解(2)-函数注册

    1. JNI开发流程 创建Native C++工程,这部分可用参考[Android JNI开发详解(2)-开发环境...

  • jni遇到的几个问题

    jni异常处理 在android ndk开发过程中,调用java对象方法可能会抛异常,如果在ndk层中不做任何处理...

  • JNI Crash:异常定位与捕获处理

    关键词:JNI Crash,异常检测,信号量捕获 在Android JNI开发中,经常会遇到JNI崩溃的问题,尤其...

  • JNI创建线程

    作为一个Android开发,或多或少都会接触到JNI,有时候需要创建线程做一些特别的操作。 一、创建线程 使用 p...

  • JNI收集知识

    Android JNI 中的线程操作[https://link.zhihu.com/?target=https%3...

  • JNI开发-线程操作

    JNI开发-线程操作 线程操作 JNIEnv指针仅在创建它的线程有效。C/C++创建的线程默认是没有附加到JVM的...

  • Rxjava---操作符篇---功能性操作符

    原文链接:Android RxJava操作符详解 系列:功能性操作符 Android RxJava:细说 线程控制...

  • Android异步任务实现详解

    在Android开发中,主线程(UI线程)不能执行耗时的操作,通常将一些耗时的操作使用异步任务的方式进行处理,简单...

  • JNI异常

    JNI异常 JNI允许native方法引发任意Java异常。native代码还可以处理未解决的Java异常。未处理...

网友评论

    本文标题:Android JNI开发详解(7)-线程操作,异常处理

    本文链接:https://www.haomeiwen.com/subject/himtactx.html