android — QGuiApplication останавливает цикл обработки событий, когда телефон заблокирован при компиляции с Qt 5.3 или Qt 5.4 (но не с Qt 5.2)

Я создал простую программу, которая воспроизводит проблему. Когда я блокирую телефон, или если я переключаюсь на другое приложение в моем телефоне Android, рабочий поток продолжает печатать, но цикл событий останавливается. Когда я возвращаюсь к своему приложению, цикл обработки событий возобновляется.

Если я заменю QGuiApplication на QCoreApplication, проблема исчезнет. Если я скомпилирую с Qt 5.2 вместо Qt 5.3, проблема исчезнет. Qt 5.4 имеет ту же проблему, что и 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();
}

Как мне предотвратить QGuiApplication от остановки цикла событий, когда приложение теряет фокус? Мне нужно мое приложение для обработки событий, даже если они не на переднем плане.

7

Решение

Как упоминалось в моих комментариях, я создал для вас отчет об ошибках с риском быть отклоненным, но, по крайней мере, мы получим обратную связь от официальных сопровождающих.

QGuiApplication «останавливается» при блокировке телефона или переключении приложения.

Теперь он был отозван, и это достаточно справедливо, потому что, как утверждает сопровождающий, вы должны сосредоточиться на создании оказание услуг а не деятельность. Однако для этого пока нет выделенного API Qt.

Причина того, что это не очень хорошая идея для этого в действии, заключается в том, что приложение может быть уничтожено, даже мгновенно, когда оно попадает в фоновый режим. Кроме того, оно может разрядить батарею раньше, чем пользователь может этого ожидать. , это рассматривается как ошибка, а не как особенность в 5.2 сопровождающим (и), которая, кажется, была исправлена.

Здесь вы можете найти некоторую помощь по созданию сервиса на сегодняшний день:

Сборка фонового сервиса с Qt на Android

3

Другие решения


По вопросам рекламы [email protected]