首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >避免在Android中注册重复广播接收器

避免在Android中注册重复广播接收器
EN

Stack Overflow用户
提问于 2015-05-23 15:25:19
回答 1查看 2.7K关注 0票数 2

我正在尝试创建我的第一个Android应用程序。我希望一个主线程活动(在我的例子中是一个ActionBarActivity)接收来自后台活动的事件通知(在我的例子中是一个IntentService)。我读过,使用广播应该是最好的方法。

要注册广播接收器以收听从后台活动发送的广播,我在主线程活动中使用以下代码:

代码语言:javascript
运行
复制
// Register broadcast receiver
LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.me.myBroadcast");
bManager.registerReceiver(bReceiver, intentFilter);

我尝试将其放入主线程活动的onCreate()方法中,但我很快发现每次重新启动该活动(例如关闭应用程序并重新打开它),它似乎会创建“重复”广播接收器,然后在发送单个广播时多次触发广播接收器的onReceive()方法。这造成了一些问题。

因此,我创建了一个SharedPreferences文件来保存一个布尔值,它可以记住我是否已经创建了一个广播接收器,以避免创建重复。这完全符合我的期望,直到我重新启动设备,当然,之后广播接收器被销毁,而应用程序没有创建一个新的,因为SharedPreferences布尔表示它已经有一个。

我想我可以通过设置一个新的广播接收器来侦听设备重新启动,从而重新设置SharedPreferences布尔值来修补这个问题,但我有一种唠叨的感觉,认为我正在使事情变得过于复杂。我遗漏了什么?谢谢您的帮助!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-24 14:24:55

要回答您的问题,您可以忽略sharedprefs并在onResume中注册广播接收器,并在onPause中注销接收方。这种方法在Reporting (1) android中有很好的描述。请注意,这样,只有在活动处于前台时,才能获得状态更新。根据需要使用适当的生命周期方法。

要将状态从服务返回到前台活动,我更喜欢的是ResultReceiver(2)类,它与广播相比感觉很自然。此外,如果您需要返回多个状态消息,则在statusCode类的onReceiveResult方法中使用ResultReceiver param将更加清晰。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30414410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档