Сигнал aboutToQuit не вызывается в среде Android?

#android #qt #qml

#Android #qt #qml

Вопрос:

Как я могу перехватить QApplication::aboutToQuit в среде Android? Он отлично работает в Windows, но он никогда не вызывается, когда пользователь закрывает приложение на Android.

Я использую Qt 5.12.2, QQuick2.

Он не работает ни на эмуляторе Android, ни на моем телефоне Android.

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

    QGuiApplication app(argc, argv);    
    QuitEventHandle test;
    QObject::connect(amp;app, amp;QCoreApplication::aboutToQuit, amp;test, amp;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;
}
  

Комментарии:

1. Проверьте это, я думаю, это то, что вы хотите: doc.qt.io/Qt-5/qguiapplication.html#applicationState (и если вы решите свою проблему, не стесняйтесь написать ответ, объясняющий ваше решение).

2. Спасибо, это фактически то, что мне нужно, applicationStateChanged (с состоянием приложения: Qt::ApplicationSuspended) вызывается непосредственно перед тем, как пользователь сможет закрыть приложение. <br/> На самом деле, мне нужно сохранить некоторые состояния приложения и очистить ресурс при закрытии приложения. Итак, мое решение таково: <br/> Используйте applicationStateChanged для сохранения состояний моего приложения, давайте Android очистит меня от проблемы с ресурсами.

Ответ №1:

Просто мысль. Жизненный цикл приложения на Android сильно отличается от того, что вы можете видеть на ПК. Когда пользователь «закрывает» приложение, оно не обязательно закрывается. Вместо этого он проходит несколько этапов: onPause , onStop и onDestroyed .

Таким образом, может быть, что сигнал не передается, потому что даже если приложение закрыто, QApplication оно все еще работает.

Если вы хотите получить больше информации о жизненном цикле активности Android: https://developer.android.com/guide/components/activities/activity-lifecycle

Возможно, вы сможете отслеживать состояние приложения с помощью QGuiApplication::applicationStateChanged(Qt::ApplicationState state)

Комментарии:

1. Спасибо за ссылку на жизненный цикл активности Android. QuiApplication::applicationStateChanged — это фактически то, что мне нужно для сохранения некоторых состояний.

Ответ №2:

Мое решение :

  • Используется QGuiApplication::applicationStateChanged для сохранения состояний приложения.
  • В случае Windows очистите ресурс с помощью: QApplication::aboutToQuit
  • В случае Android позвольте системе очистить ресурс.