我正在尝试使用本机实现重写活动回调方法(以将Lua挂接到活动中)。但是我遇到了一个麻烦,试图在JNI代码中调用超类方法,这是回调所必需的。
例如,我有一个像这样的课程:
class TestActivity extends Activity {
@Override
protected native void onCreate(Bundle bundle);
static {
System.loadLibrary("test-jni")
}
}
我正在尝试TestActivity.onCreate()在C中这样实现:
void Java_test_TestActivity_onCreate(JNIEnv* env, jobject obj, jobject bundle)
{
// Get class, super class, and super class method ID...
jclass objcls = (*env)->GetObjectClass(env, obj);
jclass sprcls = (*env)->GetSuperclass(env, objcls);
jmethodID methid = (*env)->GetMethodID(env, sprcls, "onCreate", "(Landroid/os/Bundle;)V");
// Call super class method...
(*env)->CallVoidMethod(env, obj, methid, bundle);
}
但是,当我尝试此代码时,TestActivity.onCreate()在自身而不是中调用Activity.onCreate(),产生此错误:
JNI ERROR (app bug): local reference table overflow (max=512)
我以为jmethodID是特定于类的,并且可以标识super方法,但是事实并非如此。
所以我的问题是,您如何实现这一目标…
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}
在JNI中?