您的位置:首页 > 其它

BroadcastReceiver

2016-05-08 21:16 246 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: