我正在使用BroadcastReceiver
它定期获取数据流,然后根据该数据执行某些数据库操作,以将该数据插入各种表中。
问题是,尽管您可以在内部执行数据库操作,BroadcastReceiver
但是接收方可以随时返回。此外,我喜欢在中执行此类数据库操作AsyncTask
。
但是由于它仍然不是一个好的做法,开始AsyncTask
从BroadcastReceiver
出于同样的原因,如果Android的可能杀死你的过程onReceive()
返回,并没有运行任何其它活性成分,所以我离开了Service
(据我所知)做数据库的相关工作。并且该服务应进行管理AsyncTask
。这样,Android将知道活动的组件,而Android将不会终止该进程。
那是-
BroadcastReceiver ==> 服务 ==> AsyncTask ==> SQLITE(INSERT)
如果是这样,那么怎么样IntentService
来代替Service
?
我有一个来自SQLiteOpenHelper
类的单例适配器,因此我可以使用context
从中获得onReceive()
的BroadcastReceiver
,将适配器用于数据库操作。但是这种方法似乎效率低下。
请提出建议。
在给定的情况下,这是最好的方法吗?
我会使用IntentService
而不是Service
与AsyncTask
。AsyncTask
仅当您需要在主应用程序线程上完成工作并且服务不应该在主应用程序线程上完成工作时才使用An 。
但是,除此之外,将清单BroadcastReceiver
工作委托给清单代理人Service
是一种典型的方法。
如果我在BroadcastReceiver本身中执行数据库操作怎么办?
如果您的UI恰好位于前台,则在onReceive()
执行时它将被冻结。
如果您花费几秒钟来完成工作,则将获得相当于ANR的背景,并且您的工作将被中断而没有完成。
因此,我建议使用IntentService
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句