我正在開發面向Android的國際象棋遊戲,並計劃使用用C++編寫的AI引擎。 所以,我必須從Java到C++進行本地方法調用。消息來源是這樣的:如何從Java進行同步異步本機調用
Computer.java
class Computer{
public native String dumpMethod();
static{
System.loadLibrary("mylib");
}
public static String makeMove(){
return dumpMethod();
}
和C++文件:mylib.cpp
#include <jni.h>
#include <string>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_Computer_dumpMethod(JNIEnv *, jobject);
JNIEXPORT void JNICALL Java_Computer_dumpMethod(JNIEnv *env, jobject obj){
...
Engine * engine = new Engine();
engine->setLevel(10);
std::string rsult = engine->generateMove();
...
//return result
...
}
#ifdef __cplusplus
}
#endif
當我撥打電話Computer.makeMove()的主要活動中,程序在logcat窗口中沒有任何錯誤信息時崩潰。我不知道這個問題,但似乎是因爲generateMove()執行。
當級別設置爲10時,generateMove()調用需要很長時間(最多15秒)才能完成。我認爲Android的活動無法等到它完成並且已經崩潰。
如果關卡設置爲1,則表示運行良好,這意味着可以完成generateMove()並立即返回執行結果。
我想我需要以同步方式撥打電話,但我對此不知情。 有沒有辦法以同步/異步方式進行本地調用?
我看到了同樣的問題發佈在這裏:http://stackoverflow.com/questions/11729822/android-jni-native-c-function-call-kills-activity。 – huynq9 2014-09-19 07:26:14