从BroadcastReceiver接收数据后进行数据库操作

我的上帝

我正在使用BroadcastReceiver它定期获取数据流,然后根据该数据执行某些数据库操作,以将该数据插入各种表中。

问题是,尽管您可以在内部执行数据库操作,BroadcastReceiver但是接收方可以随时返回。此外,我喜欢在中执行此类数据库操作AsyncTask

但是由于它仍然不是一个好的做法,开始AsyncTaskBroadcastReceiver出于同样的原因,如果Android的可能杀死你的过程onReceive()返回,并没有运行任何其它活性成分,所以我离开了Service(据我所知)做数据库的相关工作。并且该服务应进行管理AsyncTask这样,Android将知道活动的组件,而Android将不会终止该进程。

  • 在给定的情况下,这是最好的方法吗?

那是-

BroadcastReceiver ==> 服务 ==> AsyncTask ==> SQLITE(INSERT)

如果是这样,那么怎么样IntentService来代替Service

  • 如果我在BroadcastReceiver本身中执行数据库操作怎么办?

我有一个来自SQLiteOpenHelper的单例适配器,因此我可以使用context从中获得onReceive()BroadcastReceiver,将适配器用于数据库操作。但是这种方法似乎效率低下。

请提出建议。

常用软件

在给定的情况下,这是最好的方法吗?

我会使用IntentService而不是ServiceAsyncTaskAsyncTask仅当您需要在主应用程序线程上完成工作并且服务不应该在主应用程序线程上完成工作时才使用An

但是,除此之外,将清单BroadcastReceiver工作委托给清单代理人Service是一种典型的方法。

如果我在BroadcastReceiver本身中执行数据库操作怎么办?

如果您的UI恰好位于前台,则在onReceive()执行时它将被冻结

如果您花费几秒钟来完成工作,则将获得相当于ANR的背景,并且您的工作将被中断而没有完成。

因此,我建议使用IntentService

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章