gpt4 book ai didi

android - 广播接收器在主线程上运行?

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:01 24 4
gpt4 key购买 nike

我在我的应用程序中使用 MQTT 服务器。所以我将数据作为单个字符串而不是批量 json 数据获取。因此,如果有 100 条记录,我的广播接收器的 onReceive 将被调用 100 次。我正在从接收到的字符串中提取数据并将其仅保存到此接收器类中的数据库中。我知道通常广播接收器会在主线程中运行。所以如果我采用这种方法,我的应用程序将会挂起。那么什么是合适的方法呢?如果我想在单独的线程中运行我的接收器我应该怎么做?

这是我注册接收器的方式:

mMessageReceiver = new MQTTMessageReceiver();
IntentFilter intentFilter = new IntentFilter(MQTTService.MQTT_MSG_RECEIVED_INTENT);
registerReceiver(mMessageReceiver, intentFilter);

最佳答案

所以我可以在这里建议以下解决方案:

  1. 不要在 BoradcastReceiver 中做繁重的处理(但看起来这不是一个选择)
  2. 开始新的Thread要么 AsyncTask或者 Loader,或者任何你想要的线程机制喜欢用。所以这会将计算密集型部分移动到独立线程,不阻塞 UI。
  3. 正如 axierjhtjz 所建议的那样可以运行一个 IntentService(因为它创建了一个单独的工作线程)和 MQTTMessageReceiver(我假设这是你的BroadcastReceiver 的子类)将处理数据并通知 UI通过一个额外的 BroadcastReceiver 线程。

我个人建议使用第三种方式,因为它使您的应用程序更加模块化,这意味着更容易支持和扩展过程

编辑:我也考虑过第四种方式:

  1. 您可以使用 this method 注册接收器提供一个 Handler 对象来标识将进行数据处理的线程。

关于android - 广播接收器在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300531/

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