2014-12-13 7 views
7

Ich habe ein einfaches Programm erstellt, das das Problem reproduziert. Wenn ich das Telefon sperre, oder wenn ich zu einer anderen Anwendung in meinem Android-Telefon, wechsle, wird der Worker-Thread weiterhin gedruckt, aber die Ereignisschleife stoppt. Wenn ich zu meiner Anwendung zurückwechsle, wird die Ereignisschleife fortgesetzt.QGuiApplication stoppt die Ereignisschleife, wenn das Telefon gesperrt ist, wenn es mit Qt 5.3 oder Qt 5.4 kompiliert wird (aber nicht mit Qt 5.2)

Wenn ich QGuiApplication durch QCoreApplication ersetze, verschwindet das Problem. Wenn ich mit Qt 5.2 statt Qt 5.3 kompiliere, verschwindet das Problem. Qt 5.4 hat das gleiche Problem wie Qt 5.3.

static int count = 0; 

void workerThread() 
{ 
    while (1) { 
     qDebug("Worker thread %d", count++); 
     sleep(1); 
    } 
} 

void MyObject::step() 
{ 
    qDebug("Event loop %d", count++); 
} 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication a(argc, argv); 
    MyObject w; 
    QTimer timer; 
    QObject::connect(&timer, SIGNAL(timeout()), &w, SLOT(step())); 
    timer.start(1000); 
    QtConcurrent::run(workerThread); 
    return a.exec(); 
} 

Wie verhindere ich, dass QGuiApplication die Ereignisschleife stoppt, wenn die App den Fokus verliert? Ich brauche meine App, um Ereignisse zu verarbeiten, auch wenn sie nicht im Vordergrund sind.

+0

können Sie zeigen die Ausgabe von logcat? – lpapp

+2

sashoalm, die ich für Sie einen Bugreport geschaffen, sondern Bitte geben Sie weitere Details über das Betriebssystem und Telefon für die Entwickler: https://bugreports.qt-project.org/browse/QTBUG-43434 – lpapp

+0

Ich würde wahrscheinlich auch überprüfen, dass Anwendungsstatus (Signal geändert, etc). – lpapp

Antwort

3

Wie ich in meinen Kommentaren erwähnt habe, habe ich einen Bugreport für Sie erstellt, mit dem Risiko, abgelehnt zu werden, aber wir würden zumindest Feedback von den offiziellen Betreuern erhalten.

QGuiApplication "stops" when locking the phone or switching application.

Es ist nun zurückgezogen wurde, das ist fair genug, denn wie die Maintainer Ansprüche, Sie auf die Schaffung eines Service anstatt Tätigkeit konzentrieren. Dafür gibt es bisher noch keine dedizierte Qt-API.

Der Grund, warum es in einer Aktivität keine gute Idee ist, ist einfach, dass die Anwendung getötet werden kann, sogar sofort, wenn es in den "Hintergrund" kommt. Es kann Batterie früher entladen, als der Benutzer es erwarten kann Kurz gesagt, dies wird von dem (den) Betreuer (n) als Fehler angesehen und nicht als ein Feature in 5.2, das anscheinend behoben wurde.

Hier finden Sie einige Hilfestellungen zum Erstellen eines Dienstes ab heute:

Build background service with Qt on android

+0

Ich verstehe was du meinst. Ich wollte eine einfache Antwort, nur um einen Hut zu bekommen. : D +1 für dich. – karlphillip

+0

@ karlphillip: meine Hüte aus? ;-) Wenn du Winterhüte meinst, gehört mir alles. Ich habe diese Funktion deaktiviert. – lpapp

+0

Wie schon mein "mysteriös verschwindender" Kommentar erwähnt, ist es kein Bug, sondern ein neues Feature. Du versuchst es zu sehr ... – dtech

Verwandte Themen