回调函数之Java/C++版本

本来想写一篇分析回调函数的文章,看了很多资料,未得到大一统的结论。

但基本上,Java用接口,C++用函数指针实现。可是真正统一的写法没有,场合不同实现也不一致,所以这里只抓思想,不谈具体实现。思想基本如下图:


随着认知的深入,待续....

在安卓应用中,当需要从Java代码向C++服务端传递一个注册的回调函数时,通常会使用JNI (Java Native Interface)技术。Java会在本地生成一个对应的C++函数指针,并通过jni环境将这个指针传递给C++服务。C++端可以存储这个指针,并在其完成处理后调用这个Java函数。 以下是基本步骤: 1. **Java侧**: - 创建一个`Callback`接口或者抽象类,在Java里声明一个native方法,如 `public native void onCallback(String result)`。 ```java public abstract class Callback { public abstract void onCallback(String result); } ``` 2. **C++头文件**: - 定义一个接受Java方法指针的类型,比如 `jmethodID`,并声明一个C++函数,该函数将会模拟Java的回调。 ```cpp extern "C" JNIEXPORT void JNICALL Java_your_package_Callback_onCallback(JNIEnv *env, jobject obj, jstring result); ``` 3. **C++实现**: - 在JNI的注册部分(`RegisterNatives`),绑定`onCallback`方法到Java的native方法。 - 当服务完成任务时,通过JNI调用这个Java方法,传入结果。 ```cpp void YourCppClass::handleCompletion(const std::string& result) { if (callback_) { auto env = AttachCurrentThread(); (*callback_)(env, /* your_object */, result.c_str()); } } ``` 4. **Java调用**: - Android客户端创建`Callback`实例,然后注册这个回调给C++服务。 ```java YourService service; Callback callback = new YourCallback() { // 实现Callback接口 @Override public void onCallback(String result) { // 回调的实现 } }; service.registerCallback(callback); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值