【问题标题】:How does Cursor observability work in Android?光标可观察性如何在 Android 中工作?
【发布时间】:2012-03-07 03:14:11
【问题描述】:

我想创建一个 ContentProvider,它充当远程服务器上信息的代理。服务器可能会自发更新其信息并将该更新发送到我的 ContentProvider。我的目标是拥有一个 ListView,它显示从 ContentProvider 检索到的数据,并在底层数据发生变化时自动更新。

我的问题:如果客户端使用 ContentResolver 访问我的 ContentProvider,并且他们使用 query() 方法获得 Cursor,如果有新数据到达,他们将如何收到通知?也就是说,是否会以某种方式通知 Cursor 对象本身?这种游标可观察性如何工作?

仅供参考,我正在考虑在 ContentProvider 中使用 MatrixCursor,如果这有任何改变的话。

【问题讨论】:

    标签: android


    【解决方案1】:

    您的 ContentProvider 应该为更改的 URI 调用 ContentResolver.notifyChange()。您应该使用 v4 兼容 jar 中提供的 Loader API(它随 honeycomb 及更高版本一起提供),让您的 Activity 或 Fragment 实现 LoaderManager.LoaderCallbacks 接口,并在调用 notifyChange 时处理更新您的 UI。

    文档: http://developer.android.com/guide/topics/fundamentals/loaders.html

    教程: http://mobile.tutsplus.com/tutorials/android/android-sdk_loading-data_cursorloader/

    【讨论】:

      【解决方案2】:

      这不是问题。使用 registerContentObserver() 在光标上注册一个内容观察者。如果您的应用程序是查看数据的唯一应用程序,则无需使用 ContentProvider。

      此外,轮询服务器可能比推送更新更容易。毕竟,即使数据发生变化,设备用户也不会在意,直到他/她正在查看数据。如果您的活动出现在前台,您可以自动同步到服务器或询问用户是否要同步。请记住,您不能保证连接到网络,因此最好在网络可用时拉取而不是推送。而且更简单,因为服务器不必确定您的设备是否可用。

      在 code.google.com 中搜索 C2DM 以进行推送。对于拉取,请考虑使用同步适配器。 SampleSyncAdapter 中有一个示例。

      【讨论】:

        猜你喜欢
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-11
        • 2014-10-23
        • 2018-11-06
        • 1970-01-01
        相关资源
        最近更新 更多