2014-12-13 17 views
7

Sorunu yeniden üreten basit bir program oluşturdum. Telefonumu kilitlediğimde veya Android telefonumda başka bir uygulamaya geçtiğimde, çalışan iş parçacığı yazdırmaya devam eder, ancak olay döngüsü durur. Uygulamama geri döndüğümde, olay döngüsü devam ediyor.QGuiApplication, Qt 5.3 veya Qt 5.4 ile derlendiğinde (ancak Qt 5.2 ile değil) telefon kilitlendiğinde olay döngüsünü durdurur

QGuiApplication yerine QCoreApplication ile değiştirirseniz, sorun kaybolur. Qt 5.3 yerine Qt 5.2 ile derlerse sorun ortadan kalkar. Qt 5.4, Qt 5.3 ile aynı sorunu yaşıyor.

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(); 
} 

Uygulama odağı kaybettiğinde QGuiApplication uygulamasının olay döngüsünü durdurmasını nasıl engellerim? Ön planda değilken bile etkinlikleri işlemek için uygulamanıza ihtiyacım var.

+0

Eğer – lpapp

+2

sashoalm, sana bir hata raporu yarattı? logCat çıktısını gösterir, ancak Can Lütfen işletim sistemi ve telefon geliştiricileri için daha fazla bilgi verin: https://bugreports.qt-project.org/browse/QTBUG-43434 – lpapp

+0

Muhtemelen uygulama durumunu (değiştirilen sinyal vb.) de doğrularım. – lpapp

cevap

3

Benim yorumumda da belirtildiği gibi, reddedilme riski olan bir hata raporu oluşturdum, ancak en azından resmi bakım verenlerden geri bildirim alacağız. ettirici iddia ettiği gibi, sen aktivite yerine bir hizmeti oluşturmaya odaklanmalıdır, çünkü yeterince adil

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

Artık geri çekildi. Bununla birlikte, bunun için henüz özel bir Qt API'sı yoktur.

Bunun bir etkinlikte bunun iyi bir fikrin olmamasının nedeni, uygulamanın "arka plana" girdiğinde bile anında öldürülmesidir. Ayrıca, pilin, kullanıcının bekleyemeyeceğinden daha erken boşalması olabilir. Kısacası, bu, 5.2'de düzeltilmiş gibi görünen bir özellikten ziyade bir hata olarak kabul edilir

Bugün itibariyle bir hizmetin nasıl oluşturulacağı konusunda yardım alabilirsiniz:

Build background service with Qt on android

+0

Ne demek istediğini anlıyorum. Sadece bir şapka almak için kolay bir cevap verecektim. : D + 1 size. – karlphillip

+0

@karlphillip: şapkalarım kapalı mı? ;-) Eğer kış şapkalarını kastediyorsan, hepsi benimdir. Bu özelliği devre dışı bıraktım. – lpapp

+0

"Gizemli bir şekilde yok olan" yorumumun zaten belirttiği gibi, bu bir hata değil, yeni bir özellik. Çok zorluyorsun ... – dtech