Android-NDK/JNI

JNI回调更新UI的方法

2018-06-14  本文已影响3人  Peakmain

jni.c中

JNIEXPORT void JNICALL Java_com_peakmain_ndkproject_MainActivity_callBackShowToast
        (JNIEnv *env, jobject job){
    //1.得到字节码
    jclass jclazz = (*env)->FindClass(env, "com/peakmain/ndkproject/MainActivity");//new出来就不是上下文
    //2.得到方法
    jmethodID jmethodID = (*env)->GetMethodID(env, jclazz, "showToast", "()V");
    //3.实例化该类
    //jobject jobject = (*env)->AllocObject(env, jclazz);
    //4.调用方法
    (*env)->CallVoidMethod(env, job, jmethodID);
}

MainActivity中

   /**
     * 让c代码调用Activity的showToast
     */
    public native void callBackShowToast();

    public void onClick(View view) {
         //mJNI.callbackAdd();
       // mJNI.helloFromJava();
        //mJNI.callbackPrintString();
        //mJNI.callbackSayHello();
        MainActivity.this.callBackShowToast();
    }



    public void showToast(){
        System.out.println("showToast----------------");
      Toast.makeText(MainActivity.this,"showToast----------------",Toast.LENGTH_SHORT).show();
    }

c调用java实际是反射实例化,更新UI的时候不能实例化因为new的对象的是没有上下文,此时虽然会打印但是会报空指针错误

上一篇下一篇

猜你喜欢

热点阅读