Как обработать завершение работы приложения QML?

Я должен сохранить состояние приложения QML, когда оно закрывается, и считать его когда загрузки приложения.

Я пытался использовать Component.onCompleted и Component.onDestruction в MainView Page.

В то время как это хорошо работает на рабочем столе, на устройстве он не делает: Component.onDestruction не становится названным, когда Вы закрываете приложение.

Каков надлежащий способ обработать жизненный цикл приложения?

3
задан 8 August 2015 в 13:52

1 ответ

Компоненты Ubuntu включают возможность StateSaver . Это позволяет свойствам QML быть сохраненными в выходе программы и восстановленными при перезапуске. Для каждого элемента со свойствами Вы хотите сохранить, установить StateSaver.properties свойство к списку разделенных запятой значений свойств, которые должны быть сохранены.

Однако существует два огромных ограничения StateSaver. Во-первых, состояние не будет восстановлено, если Вы будете программировать, запускается через обработчик Uri. Во-вторых, никакое состояние не будет сохранено, когда Ваша программа будет "закрыта правильно". Я понятия не имею, какие количества как закрывающийся правильно, и поэтому я не знаю, как протестировать это.

, Поскольку я испытывал это, я наткнулся на что-то странное: при установке свойства StateSaver на элементе Component.onDestruction называют. Когда я добавил к основному Page из тестового приложения,

StateSaver.properties: "title"
StateSaver.enabled: false

, мои обработчики разрушений начали называться, по крайней мере, на нормальных выходах. Вы можете комбинировать это с StateSaver, чтобы гарантировать, что на состоянии экономят и нормальные и аварийные выходы. Я не знаю, что можно рассчитать этого поведения, все же. Я подозреваю, что это может быть несчастный случай реализации StateSaver.

Другой подход должен был бы сохранить состояние каждый раз, когда что-то изменяется. Это гарантирует, чтобы Вы ничего не делали на выходе; Ваше состояние уже безопасно. Одна проблема с этим подходом состоит в том, что изменения состояния часто связываются с изменениями в самом приложении, и процесс сохранения мог вызвать медлительность. Я столкнулся с этим видом проблемы, таким образом, я задержал запись базы данных на одну секунду . Это несовершенно, так как я потерял бы состояние, если программа отказывает в течение той секунды. Но я чувствовал, что риск был достаточно маленьким, и изменение в достаточно несущественном состоянии, для создания этого приемлемым.

3
ответ дан 1 December 2019 в 16:27

Другие вопросы по тегам:

Похожие вопросы: