use handle_cache for Looper methods

These methods need to be called very often
This commit is contained in:
Julian Winkler
2023-10-08 15:31:55 +02:00
parent a29ba61f30
commit 23c0b006ef
3 changed files with 11 additions and 5 deletions

View File

@@ -27,11 +27,10 @@ static GThread *main_thread_id;
void prepare_main_looper(JNIEnv* env) { void prepare_main_looper(JNIEnv* env) {
main_thread_id = g_thread_self(); main_thread_id = g_thread_self();
jclass class = (*env)->FindClass(env, "android/os/Looper"); (*env)->CallStaticVoidMethod(env, handle_cache.looper.class, handle_cache.looper.prepareMainLooper);
(*env)->CallStaticVoidMethod(env, class, _STATIC_METHOD(class, "prepareMainLooper", "()V"));
if((*env)->ExceptionCheck(env)) if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
(*env)->CallStaticVoidMethod(env, class, _STATIC_METHOD(class, "loop", "()V")); (*env)->CallStaticVoidMethod(env, handle_cache.looper.class, handle_cache.looper.loop);
if((*env)->ExceptionCheck(env)) if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);
} }
@@ -62,8 +61,7 @@ static gboolean glib_context_callback(gpointer user_data) {
JNIEnv *env; JNIEnv *env;
(*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6); (*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6);
jclass class = (*env)->FindClass(env, "android/os/Looper"); (*env)->CallStaticVoidMethod(env, handle_cache.looper.class, handle_cache.looper.loop);
(*env)->CallStaticVoidMethod(env, class, _STATIC_METHOD(class, "loop", "()V"));
if((*env)->ExceptionCheck(env)) if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env); (*env)->ExceptionDescribe(env);

View File

@@ -137,6 +137,9 @@ void set_up_handle_cache(JNIEnv *env)
handle_cache.application.class = _REF((*env)->FindClass(env, "android/app/Application")); handle_cache.application.class = _REF((*env)->FindClass(env, "android/app/Application"));
handle_cache.application.get_app_icon_path = _METHOD(handle_cache.application.class, "get_app_icon_path", "()Ljava/lang/String;"); handle_cache.application.get_app_icon_path = _METHOD(handle_cache.application.class, "get_app_icon_path", "()Ljava/lang/String;");
handle_cache.looper.class = _REF((*env)->FindClass(env, "android/os/Looper"));
handle_cache.looper.loop = _STATIC_METHOD(handle_cache.looper.class, "loop", "()V");
handle_cache.looper.prepareMainLooper = _STATIC_METHOD(handle_cache.looper.class, "prepareMainLooper", "()V");
} }
void extract_from_apk(const char *path, const char *target) { void extract_from_apk(const char *path, const char *target) {

View File

@@ -94,6 +94,11 @@ struct handle_cache {
jclass class; jclass class;
jmethodID get_app_icon_path; jmethodID get_app_icon_path;
} application; } application;
struct {
jclass class;
jmethodID loop;
jmethodID prepareMainLooper;
} looper;
}; };
extern struct handle_cache handle_cache; extern struct handle_cache handle_cache;