您的位置:首页 > 移动开发 > Android开发

BroadcastReceiver广播接收器知识点总结

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

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

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

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

有序广播:广播有优先级的(可设置),也可以截断广播        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()....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android