我有一个Android Activity需要捕获两个不同的广播。我目前的方法是在活动中有一个单一的BroadcastReceiver,并抓住它的广播:

public class MyActivity extends Activity {

private MyActivity.BroadcastListener mBroadcastListener;

private boolean mIsActivityPaused = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.mylayout);

// Create the broadcast listener and register the filters

mIsActivityPaused = false;

mBroadcastListener = new BroadcastListener();

IntentFilter filter = new IntentFilter();

filter.addAction(Params.INTENT_REFRESH);

filter.addAction(Params.INTENT_UPDATE);

registerReceiver(mBroadcastListener, filter);

}

@Override

protected void onResume() {

super.onResume();

mIsActivityPaused = false;

}

@Override

protected void onPause() {

super.onPause();

mIsActivityPaused = true;

}

@Override

protected void onDestroy() {

unregisterReceiver(mBroadcastListener);

super.onDestroy();

}

private void refresh() {

// refresh

}

private void update() {

// update

}

private class BroadcastListener extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(Params.INTENT_REFRESH && !mIsActivityPaused)) {

refresh();

} else if (intent.getAction().equals(Params.INTENT_UPDATE)) {

update();

}

}

}

}

我想要执行refresh()只有当我的活动是可见的在屏幕上,但我想捕获INTENT_UPDATE和执行update()在活动的整个生命周期,无论该活动是否可见。

我没有找到任何办法只注销我在onCreate中注册的两个过滤器之一,所以我使用一个标志来启用或禁用在捕获INTENT_REFRESH广播时执行的操作,具体取决于活动的状态。

问题是:这是正确的方法吗?

或者,最好有两个单独的BroadcastReceivers如下:

public class MyActivity extends Activity {

private MyActivity.BroadcastListenerRefresh mBroadcastListenerRefresh;

private MyActivity.BroadcastListenerUpdate mBroadcastListenerUpdate;

private boolean mIsBroadcastListenerRefreshRegistered = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Create the broadcast listeners

mBroadcastListenerRefresh = new BroadcastListenerRefresh();

mBroadcastListenerUpdate = new BroadcastListenerUpdate();

registerReceiver(mBroadcastListenerRefresh, new IntentFilter(Params.INTENT_REFRESH));

registerReceiver(mBroadcastListenerUpdate, new IntentFilter(Params.INTENT_UPDATE));

}

@Override

protected void onResume() {

super.onResume();

if (mBroadcastListenerRefresh != null && !mIsBroadcastListenerRefreshRegistered) {

registerReceiver(mBroadcastListenerRefresh, new IntentFilter(Params.INTENT_REFRESH));

mIsBroadcastListenerRefreshRegistered = true;

}

}

@Override

protected void onPause() {

super.onPause();

if (mBroadcastListenerRefresh != null && mIsBroadcastListenerRefreshRegistered) {

unregisterReceiver(mBroadcastListenerRefresh);

mIsBroadcastListenerRefreshRegistered = false;

}

}

@Override

protected void onDestroy() {

unregisterReceiver(mBroadcastListenerRefresh);

unregisterReceiver(mBroadcastListenerUpdate);

super.onDestroy();

}

private void refresh() {

// refresh

}

private void update() {

// update

}

private class BroadcastListenerRefresh extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(Params.INTENT_REFRESH)) {

refresh();

}

}

}

private class BroadcastListenerUpdate extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(Params.INTENT_UPDATE)) {

update();

}

}

}

}

哪一个有更好的性能?

android广播过滤器.*,android – BroadcastReceiver与多个过滤器或多个BroadcastReceivers?...相关推荐

  1. android+广播+讲解,Android广播机制

    主要内容: (1)广播机制介绍 (2)BroadcastReceiver实现 (3)BroadcastReceiver操作 (4)BroadcastReceiver生命周期 (5)注册Broadcas ...

  2. android广播教程,Android学习笔记(广播机制)

    1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...

  3. Android 广播(Android 10)

    adb shell am broadcast -a "com.mingrisoft" "com.example.myapplication" 代码实现 Andr ...

  4. android 广播震动,Android实现调用震动的方法

    本文实例讲述了Android实现调用震动的方法.分享给大家供大家参考,具体如下: 调用Android系统的震动,只需要一个类 那就是Vibrator ,这个类在hard包中,一看系统级的服务,又要通过 ...

  5. android广播示例,android接受开机广播事件

    [实例简介] [实例截图] [核心代码] package com.yin.servicetest; import com.yin.service.MyService; import android.a ...

  6. android 广播失败,android - 发送广播Intent SIM_STATE_CHANGED失败 - 堆栈内存溢出

    我需要检查Sim卡的状态,并根据其状态执行一些操作. 根据我对BroadcastReceiver的了解,当Sim状态更改时,将执行broadcastReceiver的onReceive方法. 这是Br ...

  7. android 广播震动,android 震动和提示音的实现代码

    android的消息提示(震动和提示音),实现代码如下所示: public class VibratorUtil { protected AudioManager audioManager; prot ...

  8. Android 广播的生命周期

    一:Android 广播的生命周期          一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg).当一 ...

  9. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  10. Android详细教程(基础篇):二十八、Android 广播机制BroadcastReceiver

    广播机制(BroadcastReceiver) 11.1. BroadcastReceiver简介 在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,为自己的应用擦亮明灯指明方向.而这种等 ...

最新文章

  1. js date 加一天_你不一定了解的js数据类型
  2. Java黑皮书课后题第5章:**5.19(打印金字塔形的数字)编写一个嵌套的for循环,打印下面的输出
  3. [Java]Thinking in Java 练习2.2
  4. CRM Fiori my note应用的后台ABAP实现
  5. Java StringBuilder subSequence()方法与示例
  6. 配置linux系统自带apache+php+mysql
  7. C++复习总结(涵盖所有C++基本考点)!
  8. 2. with check option能起什么作用?_【科普】专家教路:面膜护肤到底有什么用?
  9. 计算机应用基础第七章自测题,计算机应用基础 第七章.doc
  10. Linux下修改IP
  11. FaWave恢复twitter的办法
  12. HR看完这种简历就崩溃?真相是这样的!
  13. Docker之MySQL主从连接提示:Communications link failure
  14. 中国量子计算机的运算速度是,中国量子计算机问世,运算速度碾压顶级超算,美国:时代变了...
  15. Metasploit学习笔记(七)——Meterpreter后渗透之传统MS08-067漏洞利用(没成功)
  16. 文件服务器之一:NFS 服务器
  17. C语言的库函数:strlen的用法
  18. 研究生被导师嫌弃是种怎样的体验?写的太真实了...
  19. 前端实现播放直播视频或监控视频
  20. linux 设置系统时间为当前网络时间

热门文章

  1. sql语句的简单记录
  2. php 给图片增加背景平铺水印代码
  3. linux下inotify的使用
  4. 常用代码之三:jQuery为按钮绑定事件的代码
  5. 编译android系统小结
  6. 华夏名网:云主机的高性能和低价格可以兼得
  7. 06-jvm-查询命令-01
  8. UMLChina: trufun Plato是中国唯一的UML建模工具
  9. 反客为主 ——浅议呼叫中心在网络营销4C策略中的角色与价值
  10. 【javascript系列】字符串:字符串单个字符访问