标签:
1.Broadcast(广播)
是一种广泛运用的在应用程序之间传输信息的机制
2.BroadcastReceiver(广播接收者)
是对发送出来的广播进行过滤接收并响应的一类组件,他就是用来接收来自系统和应用中的广播
3.用途:
. 当开机完成后系统会产生一条广播
. 当网络状态改变时系统会产生一条广播
. 当电池电量改变时,系统会产生一条广播
发送:
. 把信息装入一个Intent对象(如Action、Category)
. 通过调用相应的方法将Intent对象以广播方式发送出去
. sendBroadcast()
. sendOrderBroadcast()
. sendStickyBroadcast()
接收:
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。
所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。
BroadcastReceiver生命周期只有十秒左右
在BroadcastReceiver里不能做一些比较耗时的操作
应该通过发送Intent给Service,由Service来完成
不能使用子线程
动态注册:onCreate()方法中注册
IntentFilter intentFilter = new IntentFilter("BC_One");
BC2 bc2 = new BC2();
registerReceiver(bc2, intentFilter);
静态注册:在配置文件中注册
<receiver
android:name="com.example.broadcastreceiverdemo.BC1"
>
<intent-filter
>
<action android:name="BC_One" />
</intent-filter>
</receiver>
普通广播特点:
同级别接收先后是随机的(无序)
级别低的后收到广播(intent-filter中android:priority="")
接收器不能截断广播的继续传播也不能处理广播(abortBroadcast())
同级别动态注册高于静态注册
有序广播特点:
同级别的接收顺序是随机的
能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否截断该广播
接收器能截断广播的继续传播,也能处理广播
同级别动态注册高于静态注册
Bundle传递数据:
Bundle bundle = new Bundle();
bundle.putString("test", "data");
setResultExtras(bundle);
Bundle bundle = getResultExtras(true);
String s2 = bundle.getString("test");
动态注册要记得销毁
在onDestroy方法中
unregisterReceiver()
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
public void doClick(View v) {
switch (v.getId()) {
case R.id.send1: // 发送一条普通广播
Intent intent = new Intent();
intent.putExtra("msg", "common broadcast");
intent.setAction("BC_One");
sendBroadcast(intent);
break;
case R.id.send2: // ordered broadcast
Intent intent2 = new Intent();
intent2.putExtra("msg", "ordered broadcast");
intent2.setAction("BC_One");
sendOrderedBroadcast(intent2, null);
// 先发送后注册 异步广播 滞留性
case R.id.send3: // asyn
Intent intent3 = new Intent();
intent3.putExtra("msg", "this is");
intent3.setAction("BC_Three");
sendStickyBroadcast(intent3);
IntentFilter intentFilter = new IntentFilter("BC_Three");
BC3 bc3 = new BC3();
registerReceiver(bc3, intentFilter);
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// unregisterReceiver(receiver);
}
标签:
原文地址:http://blog.csdn.net/duanliuchang/article/details/51347759