我正在使用 BroadcastReceiver
定期获取数据流,然后根据该数据执行某些数据库操作以将该数据插入各种表中。
问题在于,虽然您可以在 BroadcastReceiver
中进行数据库操作,但接收方可以随时返回。此外,我喜欢在 AsyncTask
中执行此类数据库操作。
但是因为从 BroadcastReceiver
启动 AsyncTask
仍然不是一个好习惯,因为如果 onReceive() 返回并且没有其他 Activity 组件在运行,所以我剩下一个
Service
(AFAIK) 来做数据库相关的工作。此服务应管理 AsyncTask
。这样 Android 就会知道 Activity 组件并且 Android 不会终止进程。
- 这是针对给定场景的最佳方法吗?
那就是-
BroadcastReceiver ==> 服务 ==> AsyncTask ==> SQLITE(插入)
如果是这样,那么 IntentService
而不是 Service
怎么样?
- 如果我在 BroadcastReceiver 本身中进行数据库操作会怎样?
我有一个来自 SQLiteOpenHelper
类的单例适配器,所以我可以使用我将从 onReceive()
接收的 context
>BroadcastReceiver 使用适配器进行数据库操作。
但这种方法似乎效率低下。
请建议..
最佳答案
Is this the best approach to do so for the given scenario ?
我会使用 IntentService
而不是带有 AsyncTask
的 Service
。 AsyncTask
仅在您有需要在主应用程序线程上完成的工作时使用,而服务不应该有需要在主应用程序线程上完成的工作。
除此之外,让 list 注册的 BroadcastReceiver
将工作委托(delegate)给 Service
是一种典型的方法。
What if I do database operations in BroadcastReceiver itself ?
如果您的 UI 恰好在前台,它会在 onReceive()
执行时被卡住。
如果您花几秒钟来完成这项工作,您将获得相当于 ANR 的背景,并且您的工作将被中断而无法完成。
因此,我建议使用 IntentService
。
关于android - 从 BroadcastReceiver 接收数据后进行数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807561/