gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:40:36 27 4
gpt4 key购买 nike

我正在使用 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 而不是带有 AsyncTaskServiceAsyncTask 仅在您有需要在主应用程序线程上完成的工作时使用,而服务不应该有需要在主应用程序线程上完成的工作。

除此之外,让 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com