JNI 接口回调

JNI 接口回调

这里主要演示从 Java 层传入自定义listener,然后由 c/c++ 层在某一时期某一线程主动调用 listener 的回调函数,完成异步回调的功能。
关于 jni 的其他部分基础知识本文不做详细介绍。

Java 层定义代码
  • java-native 函数以及接口定义

    package com.jnidemo;
    
    public class Greet {
         
    
        static {
         
            System.loadLibrary("jni_demo");
        }
    
        public native void native_say_hello(GreetListener listener);
    
        public interface GreetListener {
         
            /**
             * 这里为了演示自定义 Callback 的用法,使用了自定义 Java-Callback 类作为回调参数,
             * 可直接使用基本类型或者其他引用类型做回调参数,根据自己的业务需求决定。
             */
            void onGreetReceive(GreetCallback greet);
        }
    }
    
  • java 自定义 Callback 类

    package com.jnidemo;
    
    public class GreetCallback {
         
    
        private int greetID;
        private String greetMsg;
    
        public GreetCallback(int greetID, String greetMsg) {
         
            this.greetID = greetID;
            this.greetMsg = greetMsg;
        }
    }
    
c++ 层实现代码
  • 动态注册 native 实现函数

    const char *NATIVE_GREET_CLASS_NAME = "com/jnidemo/Greet";
    
    static JNINativeMethod gMethods_Greet[] = {
         
        {
         "native_say_hello", "(Lcom/jnidemo/Greet$GreetListener;)V", (void *)say_hello_jni}
    
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值