BroadcastReceiver 广播小结

BroadcastRecevier的使用场景

1 同一个APP的的同一组件之间

2同一个APP不同组件之间

3同一个APP不同进程之间程

4不同App之间的组件的通信

5Android系统与APP之间的通信

在上文说列举的广播机制具体可以使用的场景中,现分析实际应用中的适用性

第一种情形:同一app内部的同一组件内的消息通信(单个或多个线程之间),实际应用中肯定是不会用到广播机制的(虽然可以用),无论是使用扩展变量作用域、基于接口的回调还是Handler-post/Handler-Message等方式,都可以直接处理此类问题,若适用广播机制,显然有些“杀鸡牛刀”的感觉,会显太“重”;

第二种情形:同一app内部的不同组件之间的消息通信(单个进程),对于此类需求,在有些教复杂的情况下单纯的依靠基于接口的回调等方式不好处理,此时可以直接使用EventBus等,相对而言,EventBus由于是针对统一进程,用于处理此类需求非常适合,且轻松解耦。可以参见文件《Android各组件/控件间通信利器之EventBus》。

第三、四、五情形:由于涉及不同进程间的消息通信,此时根据实际业务使用广播机制会显得非常适宜。下面主要针对Android广播中的具体知识点进行总结。

 

 

BroadcastReceiver分为广播的发送者和广播的接受者

广播分为有序广播与无需广播,之前有提出粘性广播(现在基本提比较少)

1有序广播,根据广播接受的等级数量依次接受广播,同事广播是可以终止,修改的

2无序广播,不可修改,不可终止。

首先无序广播的发送和注册。

Intent intent = new Intent();
 intent.setAction("com.songwennuan");//定义广播的名称
 intent.putExtra("msg", "发1万块");//广播发送的参数

sendBroadcast() 广播发送

在清单文件的注册

<receiver android:name="com.broadcasttest.Receiver" >
            <intent-filter android:priority="1000" >//广播的优先等级参数
                <action android:name="com.songwennuan" />//接受广播的名称
            </intent-filter>
        </receiver>

同时广播的注册有两种上面的是静态广播的注册,还一种在源码中动态的广播的注册。代码如下

public class MainActivity extends Activity {
 public static final String BROADCAST_ACTION = "com.example.corn";
 private BroadcastReceiver mBroadcastReceiver;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 mBroadcastReceiver = new MyBroadcastReceiver();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction(BROADCAST_ACTION);
 registerReceiver(mBroadcastReceiver, intentFilter);
 }
@Override
 protected void onDestroy() {
 super.onDestroy();
 unregisterReceiver(mBroadcastReceiver);
 }

}

无序广播的接受,先继承BroadcastReceiver类,在方法onReceive中获取对应的参数

public class Level1Receiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
     
      System.out.println("消息:"+intent.getStringExtra("msg"));
   }

}
完成无序广播的发送接收。

下面是有序广播的的发送和接受

有序广播的发送时

sendOrderedBroadcast()
Intent intent = new Intent();
intent.setAction("com.songwennuan");

intent.putExtra("msg","发送广播的参数!");
sendOrderedBroadcast(intent, null, null, null, 0, "给农民兄弟发10000块钱", null);

有序广播的接受

同样是继承BroastReceiver类

public class Level1Receiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      String message = getResultData();
      System.out.println("发送有序广播的参数!:"+message);
      //abortBroadcast();//终止有序广播
      setResultData("修改的广播的参数");
      System.out.println("发送广播的参数!:"+intent.getStringExtra("msg"));
   }

}

在清单文件的注册,重要注意这个android:priority参数,参数越大等级越高,越先接先接收广播,同样的等级参数的,注册时候清单文件排在上面的,等级越高,先接收广播。

<receiver android:name="com.broadcasttest.Receiver" >
            <intent-filter android:priority="1000" >//广播的优先等级参数
                <action android:name="com.songwennuan" />//接受广播的名称
            </intent-filter>
        </receiver>

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值