2

我一直在观看 Virgil 在 Google I/O 上关于 REST-heavy 应用程序的演讲。

Google I/O 2010 - Android REST 客户端应用程序

尽管记事本教程直接从 UI 层进行数据库调用,但 Virgil 建议在服务中进行数据库调用。

目前,我的 Activity 的 onCreate 方法使用扩展的 ContentProvider 来访问 SQLite 数据库以查询 Cursor 以附加到 Activity 的 ListView。

我想将此代码移动到服务中。很容易。我的问题是,将光标传输回 UI 层的适当方法是什么?我已经看到提出的许多问题,并且似乎总是有人建议有更合适的方法来做到这一点。那是什么方法?

更具体地说,到目前为止,我认为 Activity 应该注册为某种监听器。当在 Service 中检索到 Cursor 时,会向 UI 层设置通知以访问它。服务将它推到哪里以便活动可以抓住它?

另外,我考虑的架构是有一个扩展的服务,它被活动调用。在这个服务中,数据库事务将通过使用扩展的 ContentProvider 进行,任何监听的活动都将被通知,并且将启动线程以访问 Web 服务。所以,我有 1 个扩展服务、1 个扩展 ContentProvider 和几个用于不同 Web 服务的扩展线程。这似乎可以接受吗?

4

2 回答 2

1

我只是在我的活动中使用 managedQuery 调用来获取光标。这是一个相当轻量级的操作,我认为它不会阻碍 UI。

我创建了一个服务,然后调用一个网络服务来查找新数据。如果找到新数据,则将其放入我的数据库并调用 sendBroadcast。我的活动有一个已注册的 BroadcastReceiver,它会听到广播并在光标上调用 requery()。

于 2010-09-16T21:26:24.360 回答
0

您是否考虑过实施 Loaders?

我有一个应用程序,它使用 Intent 服务从服务器获取数据并使用ContentProvider. 然后需要数据的片段或活动实现 LoaderCallbacks<Cursor>onCreateLoaderonLoadFinishedonLoaderReset)。

onCreateLoader我实例化一个CursorLoader对象并返回它,同时onLoadFinished我确保来自光标的数据显示在我的Fragment/Activity.

检查官方装载机指南

于 2013-02-13T09:19:58.937 回答