我创建了一个简单的程序来重现这个问题。当我锁定手机时,或者如果我切换到 android 手机中的另一个应用程序,工作线程会继续打印,但事件循环会停止。当我切换回应用程序时,事件循环将恢复。
如果我用QCoreApplication替换QGuiApplication,问题就会消失。如果我使用 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();
}
如何防止QGuiApp在应用失去焦点时停止事件循环?我需要我的应用程序来处理事件,即使不在前台。
正如我在评论中提到的,我为您创建了一个错误报告,有被拒绝的风险,但至少我们会从官方维护者那里得到反馈。
QGui应用程序在锁定手机或切换应用程序时"停止"。
它现在已经被撤回了,这是公平的,因为正如维护者声称的那样,你应该专注于创建服务而不是活动。但是,目前还没有专用的Qt API。
在活动中这样做不是一个好主意的原因很简单,当应用程序进入"后台"时,它可能会被杀死,即使是立即。此外,它可能会比用户预期的更早耗尽电池电量。简而言之,维护者认为这是一个错误,而不是 5.2 中的一个功能,似乎已经修复。
在这里,您可以找到一些帮助,说明如何创建截至今天的服务:
在安卓上使用Qt构建后台服务