【问题标题】:Android Wear DataLayer API usage for synchronizing when phone app is closedAndroid Wear DataLayer API 用于在手机应用关闭时进行同步
【发布时间】:2016-02-23 15:07:00
【问题描述】:

所以,我想学习这种同步策略,而不是仅仅使用更简单的 MessageAPI,但我真的很纠结如何成功地实现它。

我的项目是这样的:我通过手机查询以从 API 下载少量文本。我会每隔一段时间进行一次这些查询,还没有真正决定多久一次。数据将更新手表,它应该保留最后收到的数据。在第一次下载之后,我使用 DataMap 将数据发送到 Android Watch。我只发送一次,因为我相信这会设置一个通道,以便在准备好时不断发送更新。如果这是错误的,请纠正我。

我的主要问题是:如果 Android 手机的应用程序关闭怎么办?然后数据对象变为 null,并作为 null 发送到 Watch?或者,我应该从长期运行的服务或 Android 手机上的共享首选项发送一个对象,以使该对象永远不会为空?

【问题讨论】:

  • 恐怕您没有正确理解数据 API。 “通道”由 Wear 系统维护,与您的应用程序是否正在运行无关。当您更新 DataMap 时,它会被发送到手表独立于您的应用程序而保留在数据层中。 IOW,当您的应用关闭时,它不会“变为空”。数据层并不关心您的应用是否在任何给定时间运行。
  • 但是如果您放入 dataMap 的对象与应用程序一起被销毁,那么这不会导致发生数据更改事件并因此使用空数据更新 Watch 吗?
  • 除非您的应用在关闭之前将其从数据 API 中删除,否则不会。当我说它“独立于您的应用程序而存在于数据层中”时,这就是我的意思。将一些数据放入 API 后,您的应用是否继续运行并不重要。
  • 但是这不是表明对象实际上没有同步,并且某些手动更改事件必须由用户发送吗?如果原来放入Datamap的对象被销毁了,那怎么不从Data Layer中删除呢?如果应该发生同步?编码人员是否必须手动发出信号来表示他们想要为原始对象发送更改/修改的值?
  • 原始对象没有同步,当然——你在考虑“对象”的字面意思。这只是设备内存中的数据,对吧?该数据的副本是发送到其他设备的内容。是您将数据放入触发同步的 API 的行为;这是唯一涉及的“信号”。

标签: android wear-os google-datalayer


【解决方案1】:

将数据层更多地视为一个事件系统,即,您更新数据并在数据更新(创建、更改或删除)时收到通知。您不必担心 Activity 之后是否被杀死。即使数据被“删除”,您也会收到通知,它已被删除。

在 Wear 设备上,您可以通过 Service 或 Activity 监听变化,并相应地更新 UI、DB 等。

阅读this Android 培训指南可能很有意义。 (不会太长。)Handling Data Layer Events 部分可能是最有用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多