线程简单实现
void *customThread(void *pVoid) {
for (int i = 0; i < 30; ++i) {
__android_log_print(ANDROID_LOG_DEBUG, "hongx", "%d : ", i);
}
}
extern "C"
JNIEXPORT void JNICALL
Java_com_hongx_jni_MainActivity_testThread(JNIEnv *env, jobject thiz) {
pthread_t pthreadID;
pthread_create(&pthreadID, 0, customThread, 0);
pthread_join(pthreadID, 0);
}
C++线程调用实现UI操作
jobject instance;
void *customThread(void *pVoid) {
JNIEnv *env = nullptr;
int result = jvm->AttachCurrentThread(&env, 0);
if (result != 0) {
return 0;
}
jclass mainActivityClass = env->GetObjectClass(instance);
const char *sig = "()V";
jmethodID updateUI = env->GetMethodID(mainActivityClass, "updateUI", sig);
env->CallVoidMethod(instance, updateUI);
jvm->DetachCurrentThread();
return 0;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_hongx_jni_MainActivity_testThread(JNIEnv *env, jobject thiz) {
instance = env->NewGlobalRef(thiz);
pthread_t pthreadID;
pthread_create(&pthreadID, 0, customThread, instance);
pthread_join(pthreadID, 0);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_hongx_jni_MainActivity_unThread(JNIEnv *env, jobject thiz) {
if (NULL != instance) {
env->DeleteGlobalRef(instance);
instance = NULL;
}
}