`
hcleon
  • 浏览: 266472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JNI使用(异步条件下)

阅读更多
1、JNI异步条件下(多线程/回调函数),如何取得JNIEnv

使用AttachCurrentThread()函数。

示例代码:

        #ifdef JNI_VERSION_1_4
            jint res = cached_jvm->AttachCurrentThread((void**)&env, NULL);
        #else
            jint res = cached_jvm->AttachCurrentThread(&env, NULL);
        #endif;
        if (env == NULL)
         return;

        jclass clsSctp = env->FindClass("com/sunrising/nettest/netpackage/implement/SCTPTransImplement");
        if (clsSctp == NULL)
        {
         ThrowNullPointerException(env, "SCTP class is null");
            cached_jvm->DetachCurrentThread();
         return;
        }
        jmethodID mid = env->GetStaticMethodID(clsSctp, "communicationErrorNotify", "(JJ)V");
        if (mid == 0) {
            ThrowNullPointerException(env, "Method communicationErrorNotify() is null");
            cached_jvm->DetachCurrentThread();
            return;
        }
        env->CallStaticVoidMethod(clsSctp, mid, jlAssociationID, jlErrorType);
        cached_jvm->DetachCurrentThread();

2、使用GetStringUTFChars()之后要注意释放内存

使用上述函数之后,要使用ReleaseStringUTFChars()函数释放字符串内存。

示例代码:

   pBuffer = env->GetStringUTFChars(jsAmrFile, &isCopy);
   strncpy_s(szAmrFile, MAX_STRING, pBuffer, MAX_STRING - 1);
   if (isCopy & 0xFF)
   {
    env->ReleaseStringUTFChars(jsAmrFile, pBuffer);
   }
分享到:
评论

相关推荐

    DELPHI开发JNI必备 jni.pas

    1. **调用Java方法**:通过JNI,Delphi代码可以直接调用Java类的方法,包括静态和实例方法,以及同步和异步调用。 2. **访问Java对象**:可以创建、访问和操作Java对象,包括获取和设置字段值,调用对象的方法。 3. ...

    media_jni 源码

    JNI代码还需要处理错误条件,并可能包含性能优化策略,比如异步处理,线程管理,以及利用硬件加速等功能。 8. **权限和安全**: 在Android系统中,访问音频设备需要特定的权限。源码中可能包含检查和请求这些权限...

    JNIAdcDemoTest

    9. **测试与调试**:编写测试用例,验证JNI函数的正确性,以及在不同条件下的行为。使用如GDB这样的调试工具对本地代码进行调试。 通过AdcDemoTest项目,开发者不仅可以学习JNI的基本用法,还能深入了解如何结合...

    Java通过MsmqJava读写MSMQ源码及例子

    MSMQ,全称Microsoft Message Queuing,是由微软提供的一个可靠的消息传递服务,用于在不同网络环境、应用程序之间或者在不可靠的网络条件下进行异步通信。MsmqJava则是一个库,允许Java应用与MSMQ进行交互,它通常...

    led硬件访问服务资料

    为了提高性能,可以考虑使用异步调用来避免阻塞主线程,或者优化JNI代码以减少内存分配和拷贝。 8. **跨平台兼容性**: 虽然示例可能针对特定的硬件或Android版本,但实际应用中需要考虑设备兼容性。确保代码能够...

    android控制leds

    6. **测试与调试**:在开发过程中,可以使用adb shell命令行工具直接操作LED来验证驱动是否正常工作,或者使用Android Studio的NDK调试功能来调试JNI代码。 总结,通过上述步骤,我们可以成功地在Android应用中实现...

    Android C++高级编程 使用NDK 源码

    《Android C++高级编程:使用NDK》是一本专注于Android平台下C++开发的书籍,其源码提供了深入学习和实践的机会。NDK(Native Development Kit)是Android开发者用于编写和运行原生代码的工具集,它允许开发人员利用...

    Android 串口测试工具源码 串口调试

    串口通信,也称为UART(通用异步收发传输器),是一种简单的串行通信协议,常用于设备间的短距离通信。在Android系统中,由于安全限制,通常需要通过JNI来实现对底层硬件的访问,如串口。 JNI是Java平台的一部分,...

    android上实现speex编解码

    7. 测试与调试:在实现过程中,要进行充分的测试,确保在各种设备和网络条件下都能正常工作。可以使用adb logcat命令查看日志,调试JNI层的错误。 通过以上步骤,你就可以在Android应用中实现Speex编解码了。这将...

    Android外设开发实战_源代码

    8. **设备适配与兼容性**:由于Android设备众多,硬件差异大,源代码可能包含了针对不同设备的适配策略,如使用反射、条件编译等手段。 9. **调试技巧**:源代码中可能包含调试日志输出,使用`Log`类记录关键步骤和...

    Android应用源码FFMpeg.zip

    2. **集成库到项目**:将编译好的.so库文件放入项目的jniLibs目录下,对应不同的架构目录。在build.gradle文件中添加对NDK的支持,并配置CMake或ndk-build脚本来编译依赖的原生代码。 3. **创建JNI接口**:为了在...

    细说Android 4.0 NDK编程 源码

    线程同步则确保了多线程环境下的数据安全,防止竞态条件。错误处理则要求程序员能够妥善处理异常情况,确保程序的健壮性。 书中的源码分析部分将有助于读者更直观地理解这些概念。通过实际的代码示例,读者可以学习...

    Android高级应用源码-监听自身应用卸载,或者启动网页的实例工程。.zip

    通过这个实例,开发者可以学习如何在Android中实现一些高级功能,如监听应用状态变化,并在特定条件下执行相应的操作。这对于收集用户行为数据、实现自动化流程或提供离线服务等方面都有实际应用价值。

    Mars是微信开发的跨平台网络组件。_C++_C_下载.zip

    5. **网络同步与异步操作**:Mars支持同步和异步两种操作模式,满足不同场景下的需求。同步模式简单直接,适合简单的任务;异步模式则更适合处理复杂的网络请求,避免阻塞主线程,提高用户体验。 6. **性能优化**:...

    Android Native Development Kit Cookbook(附带实例源码)

    书可能会涉及线程池、同步机制(如互斥锁、条件变量)以及异步任务的处理。 6. **内存管理**:C/C++需要手动管理内存,书会讲述如何正确分配和释放内存,避免内存泄漏和悬挂指针等问题。 7. **硬件访问**:NDK允许...

    usb-serial-for-android-master_usb_SerialUSBTerminal_

    4. **JNI/NDK**:为了更高效地处理低级硬件交互,可能使用了Java Native Interface (JNI) 或者 Native Development Kit (NDK)。 5. **多线程编程**:串口通信通常涉及到多线程,以实现数据的并发读写。 6. **事件...

    android native c++ thread

    C++提供了多种同步原语,如`std::mutex`用于互斥锁,`std::condition_variable`用于条件变量,以及`std::future`和`std::promise`用于异步计算。正确使用这些工具可以避免竞态条件和死锁。 4. **Android.mk文件**:...

    alarm_clock_java

    这个子文件可能包含源代码、可执行文件、配置文件或者测试用例,用于展示或测试闹钟功能在特定条件下的行为。 在Java中实现闹钟功能,开发者可能会使用Java的定时器类`java.util.Timer`和`java.util.TimerTask`,...

    Android项目C语言嵌入式.rar

    5. **预编译宏和条件编译**:在C/C++代码中,可能使用预编译宏来适应不同Android版本或设备的特性,例如检查API级别,选择不同的函数实现。 6. **内存管理**:在Android的C/C++环境中,需要注意手动内存管理,避免...

    net-snmp_useful_libsnmp_android

    9. **测试与验证**:使用模拟器或真实设备进行测试,确保在不同网络条件下SNMP操作的正确性。可以使用SNMP管理工具(如Wireshark、MIB浏览器等)来辅助调试。 通过以上知识的学习和实践,开发者可以在Android应用中...

Global site tag (gtag.js) - Google Analytics