Android常用组件Broadcast介绍

一、Broadcast简介

Broadcast是Android的四大组件之一。可分为:

1、普通广播  发送一个广播,所有监听该广播的广播接收者都可以监听到改广播。 

2、异步广播  当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播。

3、有序广播  按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容. 

二、广播Broadcast实现过程

1、注册

a、配置文件注册

1 <!-- 注册自定义静态广播接收器 -->  
2 <receiver android:name="com.example.androidtest.broadcast.MyReceiver">
3   <intent-filter >
4      <action android:name="MyAction"/>
5    </intent-filter>
6</receiver>

b、代码注册

1 MyReceiver myReceiver = new MyReceiver();
2 IntentFilter filter = new IntentFilter();
3 filter.addAction("MyAction");
4 registerReceiver(myReceiver,filter);

2、发送广播

1 Intent intent = new Intent();
2 intent.setAction("MyAction");
3 intent.putExtra("msg", "这是广播发送的消息");
4 sendBroadcast(intent);

3、接收类的实现

继承BroadcastReceiver并重写onReceive方法。

1 public class MyReceiver extends BroadcastReceiver
2 {
3     public void onReceive(Context context, Intent intent)
4     {
5         Toast.makeText(context, "广播消息是:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
6     }
7 
8 }

三、若内部类作为广播接收类如何实现

1、注册

a、配置文件注册

1 <!-- 注册自定义静态广播接收器 -->  
2 <receiver android:name="com.example.androidtest.broadcast.BroadcastTest$MyReceiver">  <!-- 注意内部类写法:普通类$内部类 -->
3   <intent-filter >
4      <action android:name="MyAction"/>
5    </intent-filter>
6</receiver>

b、代码注册

1 MyReceiver myReceiver = new MyReceiver();
2 IntentFilter filter = new IntentFilter();
3 filter.addAction("MyAction");
4 registerReceiver(myReceiver,filter);

2、发送广播

1 Intent intent = new Intent();
2 intent.setAction("MyAction");
3 intent.putExtra("msg", "这是广播发送的消息");
4 sendBroadcast(intent);

3、接收类的实现

注意:若在配置文件中注册则该类必须声明为static,否则找不到,若在代码中注册可省略static修饰

1 public static class MyReceiver extends BroadcastReceiver 
2 {
3     public void onReceive(Context context, Intent intent)
4     {
5         Toast.makeText(context, "广播消息是:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
6     }
7 
8 }

四、用途

开机、锁屏、电量低…… 

五、注意

生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错 。

每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application NoResponse) 的对话框 

部分内容取自:http://yangguangfu.iteye.com/blog/1063732

 

posted @ 2015-01-30 15:30  小寻  阅读(532)  评论(0编辑  收藏  举报