#include <jni.h>
#include <string>
#include <iostream>
#include <functional>
#include <thread>
#include <memory>
#include <chrono>
#include <pthread.h>
#include "android/log.h"
jobject callback;
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO," jni ",__VA_ARGS__);
void *thread_function(void *arg) {
//初始化环境
JNIEnv *env;
JavaVM *vm = (JavaVM *) arg;
vm->AttachCurrentThread(&env, nullptr);
//开始干活
int counts = 100;
if (callback == nullptr)return nullptr;
jclass javaClass = env->GetObjectClass(callback);
if (javaClass == nullptr) {
return nullptr;
}
jmethodID javaMethodId = env->GetMethodID(javaClass, "callBack", "(I)V");
if (javaMethodId == nullptr) {
return nullptr;
}
while (counts >= 0) {
env->CallVoidMethod(callback, javaMethodId,counts);
counts--;
std::this_thread::sleep_for(std::chrono::microseconds (30));
}
env->DeleteGlobalRef(callback);
env = nullptr;
callback = nullptr;
//收尾
vm->DetachCurrentThread();
return nullptr;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_jkkc_myapplication_NativeMethod_setCallBack(JNIEnv *env, jobject thiz, jobject call_back) {
JavaVM *vm;
env->GetJavaVM(&vm);
pthread_t thread;
pthread_create(&thread, nullptr, thread_function, vm);
callback = env->NewGlobalRef(call_back);
}
在Android JNI中创建线程
于 2023-02-08 20:43:30 首次发布