最近做android项目中调用大量的底层代码(c++编写),刚开始利用JNI回调,程序正常运行,可这几天程序出现问题了,当在c/c++的线程中执行回调函数时,会导致回调失败(有时候回调方法中只执行了一句)。后来终于找到了解决方法:
利用特定线程来回调:
如:
在c++中定义回调函数指针:
typedef void (*ReceiveCallback)();
typedef struct {
ReceiveCallback recv_cb;
} Callback;
c++函数中加入
void *thread_entry(void *args) {
Callback* cb = (Callback *) args;
while (1) {
LOG(LS_INFO) << "thread running...\n";
if (cb != NULL && cb->recv_cb != NULL) {
cb->recv_cb();
}
sleep(1);
}
}
void init(Callback *cb) {
pthread_t thread;
pthread_create(&thread, NULL, thread_entry, (void *) cb);
}
调用处:
static Callback mCallbacks = { receive_callback };
void init_Create_thread(){
init(&mCallbacks);
}
void receive_callback() {
LOG(LS_INFO) << "receive_callback";
callBack_JNI();//这个是JNI回调java的方法(在JNI中编写)
}