Я должен сохранить состояние приложения QML, когда оно закрывается, и считать его когда загрузки приложения.
Я пытался использовать Component.onCompleted
и Component.onDestruction
в MainView
Page
.
В то время как это хорошо работает на рабочем столе, на устройстве он не делает: Component.onDestruction
не становится названным, когда Вы закрываете приложение.
Каков надлежащий способ обработать жизненный цикл приложения?
Компоненты Ubuntu включают возможность StateSaver . Это позволяет свойствам QML быть сохраненными в выходе программы и восстановленными при перезапуске. Для каждого элемента со свойствами Вы хотите сохранить, установить StateSaver.properties
свойство к списку разделенных запятой значений свойств, которые должны быть сохранены.
Однако существует два огромных ограничения StateSaver. Во-первых, состояние не будет восстановлено, если Вы будете программировать, запускается через обработчик Uri. Во-вторых, никакое состояние не будет сохранено, когда Ваша программа будет "закрыта правильно". Я понятия не имею, какие количества как закрывающийся правильно, и поэтому я не знаю, как протестировать это.
, Поскольку я испытывал это, я наткнулся на что-то странное: при установке свойства StateSaver на элементе Component.onDestruction называют. Когда я добавил к основному Page
из тестового приложения,
StateSaver.properties: "title"
StateSaver.enabled: false
, мои обработчики разрушений начали называться, по крайней мере, на нормальных выходах. Вы можете комбинировать это с StateSaver, чтобы гарантировать, что на состоянии экономят и нормальные и аварийные выходы. Я не знаю, что можно рассчитать этого поведения, все же. Я подозреваю, что это может быть несчастный случай реализации StateSaver.
Другой подход должен был бы сохранить состояние каждый раз, когда что-то изменяется. Это гарантирует, чтобы Вы ничего не делали на выходе; Ваше состояние уже безопасно. Одна проблема с этим подходом состоит в том, что изменения состояния часто связываются с изменениями в самом приложении, и процесс сохранения мог вызвать медлительность. Я столкнулся с этим видом проблемы, таким образом, я задержал запись базы данных на одну секунду . Это несовершенно, так как я потерял бы состояние, если программа отказывает в течение той секунды. Но я чувствовал, что риск был достаточно маленьким, и изменение в достаточно несущественном состоянии, для создания этого приемлемым.