Android JNI回调似乎调用了随机方法

时间:2014-07-07 15:45:23

标签: java android c++ eclipse java-native-interface

我遇到了一个非常奇怪的错误,我认为这可能是一个环境问题,但我想知道这里是否有其他人遇到过类似的问题。

首先,到目前为止,一切都运作良好。

我有一个与界面兼容的项目。

以下是来自代码的电话:

myJniWrapper.load(CallbackActivity.this); // this code is inside a Runnable

这是加载方法:

public void load(Activity activityCalledFrom) {
        if (mLoaded == false) {
            loadNative(mNativeHandle, activityCalledFrom); // This is being called correctly.
        }
    }

private native void loadNative(long nativeHandle, Object activityCalledFrom);

这是

JNIEXPORT void JNICALL Java_com_datalogics_dlreader_jni_RMBook_loadNative
(JNIEnv *env, jobject obj, jlong handle, jobject activityCalledFrom)
{
        if (handle)
        {
                jmethodID meth = NULL;

                // Convert the long back into a pointer
                RMBookNative *theBook = (RMBookNative *) handle;

                // Ensure the pointer is valid
                if (theBook != NULL)
                {
                        // Get the activity that we were called from
                        theBook->libraryActivityObj = env->NewGlobalRef(activityCalledFrom);

                        // Call loadDocument to set the URL for the dpdoc::Document
                        theBook->loadDocument();
                }
        }
}

稍后,加载完成后,将在C ++代码中调用以下代码:

if (libraryActivityObj != NULL)
        {
                // Find the loadingFinished method on the library class
                meth = jenv->GetMethodID(libraryActivityCls, "loadingFinished", "()V");

                // Call the method on the activity
                jenv->CallVoidMethod(libraryActivityObj, meth);
        }

然后,回到同一个活动中,我有以下方法:

public void loadingFinished() 
    {
        Log.i(getClass().getSimpleName(), "loading finished");
        doStuff();
    }

奇怪的是,一切正常(至少根据日志) - 当尝试调用loadingFinished()方法时,它会调用我活动中的一些随机公共方法发送 - 或者确切地说,它每次都会调用相同的随机方法,但如果我在活动中添加另一个方法,则标签[:C ++]代码将调用另一种方法。它似乎会根据活动中的方法总数随机选择一种方法来调用。

我试过了:清洁&重建,重新启动,重新启动我的Mac,重新启动设备 - 没有任何帮助。

我不明白发生了什么,并希望有人有任何见解。

如果您需要我发布更多代码/一般信息,请告诉我。

0 个答案:

没有答案