前提:

需要使用支持更高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. Kernel.org 被黑,获取 Android 源码方法一则
  2. 关于android连续点击出现多个Activity界面的解决方法
  3. Android 渗透测试学习手册 第三章 Android 应用的逆向和审计
  4. 58同城android客户端手机号码解密方法
  5. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方
  6. Monkey测试结果解析(二)
  7. Unable to start activity ComponentInfo 解决方法

随机推荐

  1. Android的信号格数显示优化
  2. Android监听消息通知栏点击事件
  3. 分享到某个地方
  4. 使用 Android 和 XML 构建动态用户界面
  5. arm-linux-androideabi-gcc 4.8的选项分
  6. Android UI开发第六篇——仿QQ的滑动Tab
  7. Android:Manifest merger failed with mu
  8. Android多媒体开发 Pro Android(安卓)Med
  9. Android画图 Bitmap
  10. 简单的Android日志文件记录类