我需要在 QML 应用程序关闭时保留其状态,并在应用程序加载时读取它。
我尝试在中使用Component.onCompleted
和。Component.onDestruction
MainView
Page
虽然这在桌面上运行良好,但在设备上却不行:Component.onDestruction
关闭应用程序时不会调用它。
处理应用程序生命周期的正确方法是什么?
答案1
Ubuntu 组件包括国家储蓄者功能。这允许在程序退出时保存 QML 属性并在重新启动时恢复。对于每个具有要保存的属性的元素,将属性设置StateSaver.properties
为应保存的属性的逗号分隔列表。
但是,StateSaver 有两个很大的限制。首先,如果您的程序是通过 Uri 处理程序启动的,则不会恢复状态。其次,当您的程序“正确关闭”时,不会保存任何状态。我不知道什么才算正确关闭,因此我不知道如何测试这一点。
当我尝试这个时,我偶然发现了一些奇怪的事情:如果你在元素上设置 StateSaver 属性,Component.onDestruction 就会被调用。当我添加到Page
测试应用程序的主程序中时,
StateSaver.properties: "title"
StateSaver.enabled: false
我的销毁处理程序开始被调用,至少在正常退出时是这样。您可以将其与 StateSaver 结合使用,以确保在正常和异常退出时都保存状态。不过,我不知道您是否可以计算这种行为。我怀疑这可能是 StateSaver 实现的意外。
另一种方法是每次发生更改时保存状态。这可确保您在退出时无需执行任何操作;您的状态已经安全了。这种方法的一个问题是,状态更改通常与应用程序本身的更改有关,而保存过程可能会导致运行缓慢。我遇到了这种问题,所以我数据库写入延迟一秒。这并不完美,因为如果程序在那一秒钟内崩溃,我就会丢失状态。但我觉得风险足够小,状态变化也足够小,所以这是可以接受的。