查看库存日历应用的源代码,Google使用IntentService为数据库执行内容提供程序操作。使用IntentService而不是AsyncQueryHandler是否有优势?
我认为,由于Handler与UI绑定,如果活动暂停或停止,Handler也会暂停。但是,似乎并非如此:我创建了一个简单的内容提供程序和AsyncQueryHandler,它只执行一个很长的for循环。当我启动其他应用程序或终止活动时,for循环仍会运行。
使用IntentService进行异步CRUD操作的优点是服务(作为服务)是否有可能被杀死?
更新:我的一个困惑是处理程序如何与活动的生命周期相关。从我的实验来看,它似乎是独立的。
此外,对于那些不熟悉库存日历应用程序源代码的人来说,它的工作方式是执行CRUD,它将操作添加到队列以及对处理程序的引用。然后它启动意图服务,弹出队列并执行CRUD。完成后,它会通过Message.sendToTarget()调用处理程序。
那么额外的复杂性会给我们带来什么呢?
答案 0 :(得分:0)
我陷入了同样的困惑。我发现IntentService会被活动杀死。这也意味着它将在Orientation更改时被杀死。虽然AsyncQueryHandler将继续运行(正如您所发现的)。在我的用例中,我首先更新我的UI而不等待数据库更新。所以我想我会选择AsyncQueryHandler。
我对Intent Service知之甚少(从未使用过它),但因为它正在发送消息当你需要从数据库中显示UI线程上的内容时,它可能会很有用。所以你知道数据库何时被更新