Android BroadcastReceiver广播接收器详解

来源:互联网 发布:机器人小车编程 编辑:程序博客网 时间:2024/04/27 22:51

android中的广播是一个很神奇的东西,如果使用得当的话,能大大提高我们的开发效率,最近的学习中正好接触到了这个知识点,我要把它纪录下来,方便以后复习和查阅

BroadcastReceiver是Andriod四大组件之一,在使用的过程中,我们需要自定义一个类来继承BroadcastReceiver,并实现onReceive()方法,该方法就是广播接收器需要处理的业务,不可以做耗时任务,时间超过10秒,就会出现ANR(Application Not Responding),也不能开启子线程来执行任务,因为有可能子线程还没执行完,该BroadcastReceiver就被销毁了,子线程也就被销毁了,最合适的做法应该是将耗时任务放到Service中,今天不讲Service,以免知识点混乱。

比如我定义一个MyBroadcastReceiver类继承自BroadcastReceiver类,代码如下:

public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "接收到广播了", Toast.LENGTH_SHORT).show();    }}

那么我们应该如何使用这个类呢?
我们需要先注册一下这个MyBroadcastReceiver类,然后发送一个广播
注册分为静态注册和动态注册,静态注册就是在Manifest文件中添加一个Receiver节点,代码如下:

<receiver android:name="MyBroadcastReceiver" >            <intent-filter>                <action android:name="MyBroadcastReceiver" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </receiver>

action的name属性随便写,自己能看懂就行了,相当于给这个广播接收器取了一个别名,因为android系统还有很多自带的广播接收器,所以必须要取一个别名来标志一下,以示区别。category的name属性暂时就这么写,我也不知道为啥,以后再说

好了,以上就是静态注册,动态注册就是在代码中注册,代码如下:

IntentFilter filter = new IntentFilter();        filter.addAction("MyBroadcastReceiver");        filter.addCategory("android.intent.category.DEFAULT");        registerReceiver(new MyBroadcastReceiver(), filter);

内容基本上跟静态注册差不多,设置了一个action属性和category属性。值得注意的是,动态注册需要在程序关闭之前调用unRegisterReceiver()来解除绑定,否则程序会出现很多问题

静态注册和动态注册的区别:当程序运行的时候,静态注册和动态注册都能响应广播,当程序退出的时候,动态注册也就失效了,但是静态注册依旧能响应广播。举个例子:手机上的闹铃,我们只要设定好时间,然后退出闹铃程序,到了规定的时间,闹铃就会响,但是我们确确实实退出闹铃程序了呀,其实用的就是静态注册。也不能说静态注册优于动态注册,各取所需吧,主要还是看项目需求

注册好广播接收器之后,就可以发送广播了,代码如下:

Intent intent  = new Intent();        intent.setAction("MyBroadcastReceiver");        intent.putExtra("msg", "我是广播发送者");        sendBroadcast(intent);

action字符串必须和注册时候的action一摸一样,否则是接收不到的
还可以在intent中附带一些信息,这个也是可以有的,看需求吧
然后通过sendBroadcast发送出去就万事大吉了

有序广播和无序广播
有序广播:按照优先级,优先级高的先接收到广播,优先级低的后接收到广播,优先级高的有权力终止广播,每次只能有一个人处理广播
无序广播:大家同时处理一个广播,不分先后

关于这个,以后再说吧,长老准备休息休息了

0 0
原创粉丝点击