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

博客讨论了在Android应用中使用MQTT服务器时遇到的问题,即当接收到大量数据时,广播接收器的onReceive方法会被频繁调用,可能导致UI阻塞。提出了四种可能的解决方案:避免在接收器中进行繁重处理、启动新线程、使用IntentService或通过Handler指定处理线程。建议使用IntentService来保持后台处理的独立性,并保持UI流畅。
摘要由CSDN通过智能技术生成

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

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

mMessageReceiver = new MQTTMessageReceiver();

IntentFilter intentFilter = new IntentFilter(MQTTService.MQTT_MSG_RECEIVED_INTENT);

registerReceiver(mMessageReceiver, intentFilter);

解决方法:

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

>不要在BoradcastReceiver中进行繁重的处理(但似乎

它不是一个选项)

>开始新的Thread或

AsyncTask或装载机,或任何线程机制

喜欢用.所以这将把计算密集的部分转移到

单独的线程,不阻止UI.

>正如axierjhtjz建议你的那样

可以运行IntentService(因为它创建了一个单独的工作

线程)与MQTTMessageReceiver(我假设这是你的

BroadcastReceiver的子类,它将处理数据并通知UI

穿过另一个BroadcastReceiver.

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

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

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

标签:android,broadcastreceiver

来源: https://codeday.me/bug/20190708/1400670.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值