【问题标题】:Possible to make QML application "offline capable" using caches?可以使用缓存使 QML 应用程序“离线”吗?
【发布时间】:2015-03-29 15:50:54
【问题描述】:

我正在尝试使我的 QML 应用程序之一“支持离线” - 这意味着我希望用户能够在未连接到互联网时使用该应用程序。

我看到的主要问题是,我几乎从我的一个 HTTP 服务器中提取了一个带有 UI 的 QML 文件,这使我能够将大部分代码保持在触手可及的范围内并且可以轻松更新。

我的“主 QML 文件”显然有外部依赖,例如字体(使用 FontLoader)、图像(使用 Image)和其他 QML 组件(使用 Loader)。

AFAIK 所有这些资源都是通过 Qt 网络堆栈加载的,所以我想知道我必须做些什么才能使所有资源在离线时可用,而无需手动将它们全部下载到设备。

是否可以通过在 Qt/C++ 级别调整现有/实现我自己的缓存来做到这一点,还是我完全走错了轨道?

谢谢!

【问题讨论】:

  • 每次启动应用程序时都在拉取 QML 文件?

标签: c++ qt caching qml offline


【解决方案1】:

一个简单的解决方案是反转方法:在应用程序的可执行文件/包中包含基线文件。首次启动时,将它们复制到应用程序的数据目录。然后,只要您有权访问您的服务器,就可以更新数据目录。

数据目录的所有修改都应该是原子的——它们必须要么完全成功,要么完全失败,而不会使数据目录处于不可用状态。

通常,您会创建一个新的临时数据文件夹,并在其中复制/硬链接文件,然后下载所需的内容,并且只有在一切检查完毕后,您才会将旧数据目录换成新数据目录。

让您的应用程序直接在线访问 QML 和类似资源几乎是不可能的,除非您坚持明确对所有资源进行版本控制并在 url 中包含版本号。

假设您的应用程序已启动,并且已加载一些资源。无法保证用户已访问所有 QML 屏幕 - 因此只会加载一些资源。 QML 也不保证重新加载资源的频率和时间:毕竟,它维护自己的缓存。有时您会更新服务器上的内容。完成更改后,用户继续探索应用程序的更多内容,但现在他体验的应用程序是新旧部分的科学怪人,不能保证这些部分仍然可以一起工作。这是个坏主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2011-07-31
    • 2013-01-31
    • 2017-05-23
    • 2016-06-17
    • 2010-10-24
    相关资源
    最近更新 更多