diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 21 | ||||
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 2 |
2 files changed, 17 insertions, 6 deletions
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<jclass>(env->NewGlobalRef(jQtNative)); |