Emit is not working when calling on a separate android thread
-
Hey. Sorry for my english.
There is a code that running on android on a separate Thread (Java Code) like this:
@
public class ClientThread extends Thread
{
public void run()
{
MainActivity.nativeMethod(); // not working
}
}public class MainActivity extends QtActivity
{
private static final String TAG = "MainActivity";
private static MainActivity _instance = null;
private static ClientThread _clientThread = null;public MainActivity() { _instance = this; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); nativeMethod(); // working _clientThread = new ClientThread(); _clientThread.start(); } public static native void nativeMethod();
}@
And there is C++ bridge for that:
@class TestObject : public QObject
{
Q_OBJECTpublic:
explicit TestObject(QObject *parent = 0);
static TestObject *getInstance();Q_SIGNALS:
void nativeMethod();public Q_SLOTS:
};
static void jniNativeMethod(JNIEnv *, jclass)
{
qDebug() << "works threaded or non-threaded calls"
emit TestObject::getInstance()->nativeMethod();
}@Also a QML connection:
@import TestObjectPackage 1.0
Connections
{
target: TestObjectPackage.testObjectInstance
onNativeMethod:
{
console.log("QML received signal!");
}
}@jniNativeMethod calls every time but emit not sending signal to QML on sepearate thread. Could you help me?
-
I wonder if the problem is due to the use of a static signal.
Cross-thread signal delivery uses an event loop in the receiving thread. Intra-thread delivery is a direct call by default. The static use might confuse the detection of the correct connection type.