From aebf66d242614334962a1d339ac6c168d9e3f9e6 Mon Sep 17 00:00:00 2001 From: Heikki Haveri Date: Thu, 12 Jan 2017 14:27:49 +0200 Subject: Enable QtAndroid::runOnAndroidThread in a Service Change-Id: I214f5dc70c52011a5e1712ea70f97f8b564fb664 Reviewed-by: BogDan Vatra --- .../jar/src/org/qtproject/qt5/android/QtNative.java | 21 ++++++++++++++++----- src/corelib/kernel/qjnihelpers.cpp | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index af4f20679c..b7d1217e98 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -243,13 +243,24 @@ public class QtNative } } - private static void runPendingCppRunnablesOnUiThread() + private static void runPendingCppRunnablesOnAndroidThread() { synchronized (m_mainActivityMutex) { - if (!m_activityPaused && m_activity != null) - m_activity.runOnUiThread(runPendingCppRunnablesRunnable); - else - runAction(runPendingCppRunnablesRunnable); + if (m_activity != null) { + if (!m_activityPaused) + m_activity.runOnUiThread(runPendingCppRunnablesRunnable); + else + runAction(runPendingCppRunnablesRunnable); + } else { + final Looper mainLooper = Looper.getMainLooper(); + final Thread looperThread = mainLooper.getThread(); + if (looperThread.equals(Thread.currentThread())) { + runPendingCppRunnablesRunnable.run(); + } else { + final Handler handler = new Handler(mainLooper); + handler.post(runPendingCppRunnablesRunnable); + } + } } } diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 2f701b8f0d..1ad6dfd44f 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -393,7 +393,7 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) return JNI_ERR; g_runPendingCppRunnablesMethodID = env->GetStaticMethodID(jQtNative, - "runPendingCppRunnablesOnUiThread", + "runPendingCppRunnablesOnAndroidThread", "()V"); g_hideSplashScreenMethodID = env->GetStaticMethodID(jQtNative, "hideSplashScreen", "()V"); g_jNativeClass = static_cast(env->NewGlobalRef(jQtNative)); -- cgit v1.2.3