BroadcastReceiver广播接收器知识点总结

广播在应用程序中担任的角色:只担任开启程序其他组件的角色。不能在广播接收器中进行过多的业务逻辑和耗时的操作,不能开启线程等。

根据广播的性质可以将广播分为:标准广播和有序广播

根据广播的范围可以分为:全局广播和本地广播

标准广播:异步的,发送广播之后,广播接收器可以同时接收到发送的广播,效率比较高

有序广播:广播有优先级的(可设置),也可以截断广播        intent-filter标签的属性中设置:android:priority="100"


全局广播:其他的应用程序可以接收到本程序发送的广播,其他应用程序也可以向本程序发送广播

       缺点:本程序可以发送广播到其他应用程序,容易造成数据泄密;其他应用程序可以向本程序发送垃圾广播,且有安全漏洞

本地广播:只在本程序内部发送的广播(没有静态注册)

       优点:不会有数据泄密和安全漏洞问题,且传播的效率更高

使用方法:LocalBroadCastManager   manager = LocalBroadCastManager.getInstance(this);

然后使用manager注册和注销服务,其他都和全局广播一样


广播的注册方式:动态注册、静态注册

动态注册:比较灵活,需在代码中手动注册和注销广播,程序启动之后才能接收到广播

静态注册:在xml文件中注册,程序不用启动就可以接收到广播


发送标准广播:sendBroadCast(intent)

发送有序广播:sendOrderedBroadCast(intent,null)

截断广播:abortBroadCast()


需求:当在某个Activity中,想程序退出(退出全部的Activity),可以使用广播

若有三个Activity:MainActivity、SecondActivity和 ThirdActivity,在ThirdActivity中就要求退出程序,则用以下方法可实现:

MainActivity中创建广播接收器

class MainBroadCast extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("TAG", "MainBroadCast AND MainActivity.this.finish()");
            //退出Activity
            MainActivity.this.finish();
        }
    }

然后在onCreate()方法中注册需要接收的广播,在onDestroy方法中注销广播
       IntentFilter filter = new IntentFilter();
        filter.addAction("com.exit.activity");
        caster = new MainBroadCast();
        registerReceiver(caster, filter);


接着在SecondActivity中创建广播接收器

class SecondBroadCastReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("TAG", "SecondBroadCastReceiver AND SecondActivity.this.finish()");
            SecondActivity.this.finish();
        }
    }

然后在onCreate()方法中注册需要接收的广播在onDestroy方法中注销广播

        IntentFilter filter = new IntentFilter();
        filter.addAction("com.exit.activity");
        receiver = new SecondBroadCastReceiver();
        registerReceiver(receiver, filter);

最后在ThirdActivity中发送关闭activity的广播

Intent intent = new Intent("com.exit.activity");
 sendBroadcast(intent);


这样就可以退出全部的activity了。方法执行的顺序是:

MainBroadCast AND MainActivity.this.finish()
SecondBroadCastReceiver AND SecondActivity.this.finish()

ThirdActivity onPause()....
MainActivity onDestroy()....
SecondActivity onDestroy()....
ThirdActivity onStop()....
ThirdActivity onDestroy()....


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值