7

我创建了一个简单的程序来重现该问题。当我锁定手机时,或者如果我切换到我的安卓手机中的另一个应用程序,工作线程会继续打印,但事件循环会停止。当我切换回我的应用程序时,事件循环恢复。

如果我用 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();
}

当应用程序失去焦点时,如何防止 QGuiApplication 停止事件循环?即使不在前台,我也需要我的应用程序来处理事件。

4

1 回答 1

3

正如我在评论中提到的,我为你创建了一个错误报告,但有被拒绝的风险,但至少我们会从官方维护者那里得到反馈。

QGuiApplication 在锁定手机或切换应用程序时“停止”。

它现在已被撤回,这很公平,因为正如维护者所说,您应该专注于创建服务而不是活动。然而,目前还没有专门的 Qt API。

在活动中这样做不是好主意的原因很简单,应用程序可能会在进入“后台”时被终止,甚至是立即终止。此外,它可能会比用户预期的更早耗尽电池电量。简而言之,这被维护者认为是一个错误而不是 5.2 中的一个功能,似乎已经修复。

从今天开始,您可以在此处找到有关如何创建服务的一些帮助:

在 android 上使用 Qt 构建后台服务

于 2014-12-18T08:55:18.270 回答