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

 

你可能感兴趣的:(Broadcast)