到目前为止,我的 IntentService (s)一直运行良好,因为每个 IntentService 仅接收来自单个活动的请求( SQLite INSERTs)并响应相同的活动。
然后我想出了如何使用来自相同 IntentService (SQLite)的数据加载活动中的视图;现在事情变得复杂了。也就是说:我至少有两个活动向同一个 IntentService 发出请求(READ / INSERT / UPDATE)( IntentService 存在SQLite数据库中的10个表中的每个表。
主要挑战 IntentService 已知道哪个 Intent 来自哪些活动并发送回复(数组)数据或来自SQLite DB的INSERT / UPDATE请求的结果)返回 CORRECT活动。
到目前为止,每个活动一直在使用 Handler.Callback 与其 IntentService 进行通信,现在似乎没有完成任务。其他两个选项是 ResultReceiver 和 LocalBroadcastManger 。
我需要深入了解 IntentService 所需的机制,以识别每个 Intent 的来源/调用活动,以便响应/结果变为他们应该去哪里。
谢谢!
答案 0 :(得分: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。我是第二位发言人。