0

到目前为止,我的IntentService (s) 一直运行良好,因为每个IntentService只接收来自单个Activity (SQLite INSERT) 的请求并响应同一个Activity

然后我想出了如何使用来自同一个IntentService (SQLite)的数据在Activity中加载视图;现在事情变得复杂了。也就是说:我至少有两个活动向同一个IntentService发出请求(READ/INSERT/UPDATE) ( SQLite 数据库中的 10 个表中的每一个都有一个IntentService )。

主要挑战: IntentService必须知道Intent来自哪个 Activity并将响应(数据数组或来自 SQLite DB 的 INSERT/UPDATE 请求的结果)发送回正确的 Activity

到目前为止,每个Activity一直在使用Handler.Callback与其IntentService进行通信,现在这似乎无法胜任这项任务。其他两个选项是ResultReceiverLocalBroadcastManger

我需要深入了解IntentService识别每个Intent的源/调用Activity所需的机制,以便响应/结果到达它们应该去的地方。

谢谢!

4

1 回答 1

0

Quasaur,如果您致力于使用 IntentService,我不确定在处理程序和您提到的其他组件之外还有很多其他可以使用的组件。但是,IntentServices 被设计为一种即发即弃的组件,不需要与调用者进行通信。如果您需要在服务中工作并直接与调用者通信,则最好绑定到常规服务。

来自文档: IntentService 这是 Service 的一个子类,它使用工作线程来处理所有启动请求,一次一个。如果您不要求您的服务同时处理多个请求,这是最佳选择。您需要做的就是实现 onHandleIntent(),它接收每个启动请求的意图,以便您可以进行后台工作。

我看到的另一个问题是您要求将响应路由到特定活动。你真的应该一次只做一项活动。路由到多个会假设您一次拥有多个,这是有问题的。

所有这些都放在一边,如果您正在寻找数据库抽象层,我建议您查看 ContentProvider。它是 Android 的核心组件,在系统中无处不在。文档可以在这里找到:http: //developer.android.com/reference/android/content/ContentProvider.html

请记住,ContentProviders 很难手动编写,甚至更难正确编写。我在我们当地的 Android 开发人员聚会上做了一次演讲,在那里我讨论了一个可用于 Eclipse 的工具,该工具将为您生成它们。它彻底改变了我开发 Android 应用程序的方式。随意看看:https ://www.youtube.com/watch?feature=player_embedded&v=5LDXeRza_ak 。我是第二个发言者。

于 2013-05-03T05:56:10.510 回答