在Android环境中未调用aboutToQuit信号?

时间:2019-03-28 14:47:50

标签: android qt qml

如何在Android环境中捕获QApplication :: aboutToQuit? 它在Windows上可以完美运行,但是当用户在Android上关闭应用程序时永远不会调用它。

我正在使用Qt 5.12.2,QQuick2。

它在Android Emulator和Android手机上均不起作用。

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);    
    QuitEventHandle test;
    QObject::connect(&app, &QCoreApplication::aboutToQuit, &test, &QuitEventHandle::aboutToQuit);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;        

    return app.exec();
}

class QuitEventHandle : public QObject
{
    Q_OBJECT

public:
    QuitEventHandle(QObject *parent=nullptr);
    virtual ~QuitEventHandle() override;

public slots:
    void aboutToQuit();
};

QuitEventHandle::QuitEventHandle(QObject *parent) : QObject(parent)
{
}
QuitEventHandle::~QuitEventHandle()
{
}

void QuitEventHandle::aboutToQuit()
{
    int a = 2;
}

2 个答案:

答案 0 :(得分:1)

只是一个想法。 Android上的应用程序生命周期与PC上的生命周期完全不同。当用户“关闭”应用程序时,它不一定关闭。相反,它经历了几个阶段:onPauseonStoponDestroyed

这可能是因为即使关闭应用程序QApplication仍在运行,所以没有发出信号。

如果您想获取有关Android的Activity生命周期的更多信息:https://developer.android.com/guide/components/activities/activity-lifecycle

您也许可以使用QGuiApplication::applicationStateChanged(Qt::ApplicationState state)

跟踪应用程序的状态

答案 1 :(得分:1)

我的解决方案:

  • 使用QGuiApplication :: applicationStateChanged保存应用程序的状态。
  • 对于Windows,使用以下命令清理资源:QApplication :: aboutToQuit
  • 对于Android,让系统清理资源。