diff --git a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java index 67175370e6f..fbfe71dd1a8 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java @@ -75,9 +75,8 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase m_activity.getApplication().unregisterActivityLifecycleCallbacks(this); QtNative.unregisterAppStateListener(QtEmbeddedDelegate.this); QtEmbeddedViewInterfaceFactory.remove(m_activity); - QtNative.terminateQt(); + QtNative.quitQt(); QtNative.setActivity(null); - QtNative.getQtThread().exit(); } } }); diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index 51138e9a6ca..81ef78a8e2c 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -44,7 +44,8 @@ public class QtNative // a list of all actions which could not be performed (e.g. the main activity is destroyed, etc.) private static final BackgroundActionsTracker m_backgroundActionsTracker = new BackgroundActionsTracker(); - private static final QtThread m_qtThread = new QtThread(); + private static QtThread m_qtThread = null; + private static final Object m_qtThreadLock = new Object(); private static ClassLoader m_classLoader = null; private static final Runnable runPendingCppRunnablesRunnable = QtNative::runPendingCppRunnables; @@ -193,7 +194,15 @@ public class QtNative } static QtThread getQtThread() { - return m_qtThread; + if (m_qtThread != null) + return m_qtThread; + + synchronized (m_qtThreadLock) { + if (m_qtThread == null) + m_qtThread = new QtThread(); + + return m_qtThread; + } } interface AppStateDetailsListener { @@ -339,12 +348,13 @@ public class QtNative static void startApplication(String params, String mainLib) { - m_qtThread.run(() -> { + QtThread thread = getQtThread(); + thread.run(() -> { final String qtParams = mainLib + " " + params; if (!startQtAndroidPlugin(qtParams)) Log.e(QtTAG, "An error occurred while starting the Qt Android plugin"); }); - m_qtThread.post(QtNative::startQtApplication); + thread.post(QtNative::startQtApplication); waitForServiceSetup(); m_stateDetails.isStarted = true; notifyAppStateDetailsChanged(m_stateDetails); @@ -363,6 +373,17 @@ public class QtNative }); } + static void quitQt() + { + terminateQt(); + m_stateDetails.isStarted = false; + notifyAppStateDetailsChanged(m_stateDetails); + getQtThread().exit(); + synchronized (m_qtThreadLock) { + m_qtThread = null; + } + } + @UsedFromNativeCode static int checkSelfPermission(String permission) {