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

时间:2015-05-18 10:15:56

标签: android broadcastreceiver

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 不要在BoradcastReceiver中进行繁重的处理(但似乎 它不是一个选项)
  2. 开始新的ThreadAsyncTask或Loader,或任何线程机制 喜欢用。所以这将把计算密集的部分转移到 单独的线程,不阻止UI。
  3. 正如axierjhtjz建议你的那样 可以运行IntentService(因为它创建了一个单独的工作 线程)与MQTTMessageReceiver(我假设这是你的 BroadcastReceiver的子类,它将处理数据并通知UI 穿过另一个BroadcastReceiver。
  4. 我个人建议使用第三种方式,因为它使你的应用程序更加模块化,意味着更容易支持和扩展程序

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

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