android通过线程回调java方法
2012-05-28 12:47
369 查看
最近做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中编写)
}
利用特定线程来回调:
如:
在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中编写)
}
相关文章推荐
- Android-Jni线程(三)— JNI全局回调java方法
- JNI中创建新的线程回调java方法的技巧
- Java通过join方法来暂停当前线程
- Android开发实践:JNI层线程回调Java函数示例
- android使用c通过jni回调java
- Java多线程-通过线程的中断来深入学习interrupt方法,Volatile关键字
- Android C代码回调java方法
- 利用WebView通过javascript调用android java方法
- android使用c通过jni回调java
- Android开发实践:JNI层线程回调Java函数示例
- 了解Java线程的start方法如何回调run方法
- android linux线程通过JNI回调java函数
- Android 线程中通过回调方式更新界面UI.
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- Android开发 通过JNI实现JAVA与C/C++程序间的调用和回调
- android c打日志 回调java方法(非静态方法)
- java程序设计中线程的方法回调(龟兔赛跑)
- android使用c通过jni回调java
- Android ndk jni中回调java的方法&字段描述符
- Android(java)学习笔记107-0:通过反射获得构造方法并且使用