ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-08 09:24:37  阅读:772  来源: 互联网

标签:android broadcastreceiver


我在我的应用程序中使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有