WeakGlobalRef がガベージ コレクションされたオブジェクトを指しているという問題がありました。この ref で CallVoidMethod を呼び出そうとすると、アプリケーションがクラッシュしました。これを修正するには、次のようにします。
jobject javaObject = pEnv->NewLocalRef(m_pJavaObject);
if (javaObject)
{
pEnv->CallVoidMethod(javaObject, method, object);
}
これは CallVoidMethod でまだクラッシュしています。これはそのように行うのに有効ですか、それともローカル ref をチェックする必要がありますか?IsSameObject
私がダンプで最後に得ること、より高いものは、任意のメソッドを指すことができません:
Crash reason: SIGSEGV
Crash address: 0xdead4321
Process uptime: not available
Thread 0 (crashed)
(...)
41 libart.so + 0xba7df
sp = 0xbeed2dc0 pc = 0xb4eca7e1
Found by: stack scanning
42 libxxx.so!_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...) [jni.h : 650 + 0x1]
sp = 0xbeed2dd8 pc = 0x9fabbeb9
Found by: stack scanning