zoukankan      html  css  js  c++  java
  • Jni OnLoad()和OnUnload()

    除了前面说的自定义JNI函数之外,JNI还提供了两个特殊函数,它们是JNI_OnLoad()和JNI_OnUnload(),分别在加载库和卸载库的时候调用。

    1、JNI_OnLoad()

     Java调用System.loadLibrary()加载一个库的时候,会首先在库中搜索JNI_OnLoad()函数,如果该函数存在,则执行它;
     JNI_OnLoad()的作用主要有几点:
     1、告诉JVM,这个库需要要求使用的JNI版本是什么
     2、执行初始化操作
     3、将JavaVM参数保存为全局对象,方便以后在任何地方获取JNIEnv对象(后面会介绍)
    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
        JNIEnv *env = NULL;
        jint result = -1;
    
        if (jvm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
            return -1;
        }
    
        result = JNI_VERSION_1_4;
        return result;
    }

    如果一个库不存在JNI_OnLoad()函数,那么JVM默认会使用最老版本的JNI,即1.1。

     JNI_OnLoad方法在每一个库中只能存在一个。
    2、JNI_OnUnload()
     According to the JNI documentation, it will be called when the classloader that loaded the libarary is garbage collected. 
     根据JNI文档的描述,当GC回收了加载这个库的ClassLoader时,该函数被调用
    JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved)
    {
        //TODO-
    }
  • 相关阅读:
    [玩]用安卓手机搭建免费Linux服务器
    SSM自学教程
    outlook 2016 系列1--收件归类
    软件开发流程模型
    Android P系统编译之使用PRODUCT_COPY_FILES拷贝文件或文件夹
    车载系统交互的三秒原则
    同理心地图
    Excel 操作
    Android中5种最常见的内存泄漏问题以及解决办法
    android动画相关
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/10605745.html
Copyright © 2011-2022 走看看