2014-12-13 13 views
7

Ho creato un semplice programma che riproduce il problema. Quando blocco il telefono o se passo a un'altra applicazione nel mio telefono Android, , il thread di lavoro continua a stampare, ma il ciclo di eventi si interrompe. Quando torno alla mia applicazione, il ciclo degli eventi riprende.QGuiApplication arresta il ciclo di eventi quando il telefono è bloccato quando compilato con Qt 5.3 o Qt 5.4 (ma non con Qt 5.2)

Se si sostituisce QGuiApplication con QCoreApplication, il problema scompare. Se compilo con Qt 5.2 invece di Qt 5.3, il problema scompare. Qt 5.4 ha lo stesso problema di 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(); 
} 

Come posso evitare QGuiApplication da fermare il ciclo degli eventi quando l'applicazione perde lo stato attivo? Ho bisogno della mia app per elaborare gli eventi anche quando non sono in primo piano.

+0

si può mostrare l'output di logcat? – lpapp

+2

sashoalm, ho creato un bugreport per voi, ma si prega di fornire maggiori dettagli sul sistema operativo e sul telefono per gli sviluppatori: https://bugreports.qt-project.org/browse/QTBUG-43434 – lpapp

+0

Probabilmente verificherei anche lo stato dell'applicazione (segnale modificato, ecc.). – lpapp

risposta

3

Come menzionato nei miei commenti, ho creato una segnalazione di errore per te con il rischio di essere respinta, ma almeno avremmo ricevuto un feedback dai manutentori ufficiali.

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

Ora è stato ritirato, il che è abbastanza giusto, perché come sostiene manutentore, si dovrebbe concentrarsi sulla creazione di un servizio di piuttosto che attività. Non ci sono ancora Qt API dedicate per questo, comunque.

Il motivo per cui non è una buona idea questo in una attività è semplicemente che l'applicazione può essere uccisa, anche istantaneamente, quando entra nello "sfondo. Inoltre, può scaricare la batteria prima di quanto l'utente possa aspettarsi In breve, questo è considerato un bug piuttosto che una funzionalità in 5.2 dal maintainer che sembra essere stato corretto

Qui potete trovare aiuto su come creare un servizio a partire da oggi:

Build background service with Qt on android

+0

Capisco cosa intendi. Stavo per una risposta facile, solo per avere un cappello. : D +1 a te. – karlphillip

+0

@karlphillip: il mio cappello si spegne? ;-) Se intendi cappelli invernali, tutto mio è tuo. Ho disabilitato quella funzione. – lpapp

+0

Come già detto nel mio "misteriosamente evanescente", non è un bug ma una nuova funzionalità. Stai provando troppo ... – dtech