前提:

需要使用支持更高gcc版本的第三方NDK包。Android默认版本为:4.4.3。

第三方NDK包下载(gcc-4.6.3):http://www.crystax.net/en/android/ndk/7

具体使用注意事项请参考此文。

本测试主要展示以下内容:

1、使用std::function和std::bind实现sigslot机制;
2、使用C++11的Lambda表达式
3、在C++代码中回调Java对象的方法

例子来源:

本测试例子来自网上的一个讨论里的回复,由于看到有lambda表达式,就有了在iOS及Android环境下测试的念头。

http://stackoverflow.com/questions/12516239/a-simple-signal-for-a-button-in-c

主要代码片段:

定义回调类型
typedef std::function<void(const char *)> callback_t;
定义一个全局回调函数指针,以方便GenericButton类内调用,初始化见下面的代码。
callback_t jni_callback;

导出JNI函数。此函数的主要功能:内部查找Java类的messageMe方法,以便进行回调。回调messageMe的方法用了三种:直接使用JNIEnv调用;直接调用Lambda回调函数;在GenericButton类中调用(通过sigslot_main函数,此函数即原例子的main方法)。
extern "C" {  JNIEXPORT jstring JNICALL    Java_com_sigslot_MainActivity_sigSlot( JNIEnv* env, jobject thiz )    {      jstring jstr = env->NewStringUTF("This comes from jni(via JNIEnv directly).\n");      jclass clazz = env->FindClass("com/sigslot/MainActivity");      jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)Ljava/lang/String;");      jobject result = env->CallObjectMethod(thiz, messageMe, jstr);      jni_callback=[env, thiz, messageMe](const char* info){        LOGI(info);        jstring jstr2 = env->NewStringUTF(info);        env->CallObjectMethod(thiz, messageMe, jstr2);      };      jni_callback("Lambda in std::function (via lambda callback).\n");      sigslot_main(); // call GenericButton's pressButton method.      return env->NewStringUTF("sigslot main from JNI C++!");    }}

apk包:

仅供有兴趣的朋友下载、安装、测试。下载链接:http://download.csdn.net/detail/dyw/4674834


更多相关文章

  1. Android(安卓)IO流使用详解-SDcard
  2. Android(安卓)调用系统相机以及相册源码
  3. Android反编工具的使用-Android(安卓)Killer
  4. Android(安卓)内存管理
  5. Android中用Application类实现全局数据变量的使用
  6. 箭头函数的基础使用
  7. NPM 和webpack 的基础使用
  8. Python技巧匿名函数、回调函数和高阶函数
  9. Python list sort方法的具体使用

随机推荐

  1. Android触摸事件分发之View篇
  2. android使用AIDL跨进程通信(IPC)
  3. 第五章 网络 之 Android网络知识&框架(二)
  4. 解决CardView在5.0以下留白的问题
  5. 干货丨高频数据处理技巧:如何将高频信号转
  6. android的TextView的TextWatcher使用
  7. webrtc 服务器 janus android使用教程1:E
  8. Android实现三级联动下拉框 城市选择器(简
  9. Android(安卓)Package Name vs. Applicat
  10. Android(安卓)Studio初次使用问题