Android广播

BroadCast(广播)

  • 标准广播 完全异步广播,所有广播接收器同时接收

  • 有序广播 同步广播,优先级高的先接受,前面的广播可以截断

    广播接收器注册方式:

    动态:

    1. ​ 创建一个广播接收器类,继承BroadCastReceiver类,有广播到来时,onReceive()方法就会得到执行。需要注意的是,动态注册的广播接收器一定都要取消注册才行,可以在onDestroy()方法中调用unregisterReceiver()方法来实现。

    2. 缺点:必须启动后才可以接收广播

      intentFilter = new IntentFilter();
      intentFilter.addAction("com.gww.broadcast");
      dBroadCastReceiver = new DBroadCastReceiver();
      registerReceiver(dBroadCastReceiver,intentFilter);
      

    静态:

    <receiver android:name=".JBroadcastReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.gww.broadcast"/>
        </intent-filter>
    </receiver>
    

    静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用。

    静态广播发送不成功可能原因:原因在于这个广播 是“隐式” 发送的,8.0中,静态注册的广播接收者无法接受 隐式 广播。

​ 可以显示发送

Intent intent = new Intent(MainActivity.this,JBroadcastReceiver.class);
sendBroadcast(intent);

有序广播:

IntentFilter filter2 = new IntentFilter();
filter2.addAction("com.gww.you1");
filter2.setPriority(1001);
this.registerReceiver(new text2Receiver(), filter2);

IntentFilter filter1 = new IntentFilter();
filter1.addAction("com.gww.you1");
filter1.setPriority(1000);
this.registerReceiver(new text1Receiver(), filter1);

IntentFilter filter3 = new IntentFilter();
filter3.addAction("com.gww.you1");
filter3.setPriority(998);
this.registerReceiver(new text3Receiver(), filter3);
sendOrderedBroadcast(intent,null); 使用 abortBroadcast();可以截断广播
sendBroadcast(intent);也可发送有序广播,但是无法截断

不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为再广播接收器中是不允许开启线程的

动态广播最好在Activity 的onResume()注册、onPause()注销。原因:对于动态广播,有注册就必然得有注销,否则会导致内存泄露

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值