您的位置:首页 > 其它

BroadCastReceiver概念与使用

2017-12-29 06:31 302 查看
BroadCastReceiver是Android程序的四大组件之一。

BroadCastReceiver实际是广播的接收器,可以对BroadCast(广播)进行过滤,接收,处理的一个类。

使用的方式如下:

广播发送:

将信息(要发送的信息,过滤用的信息。如:Action,Category)添加到一个Intent对象中,然后通过相应的方法将Intent对象作为广播发送出去。

如:

sendBroadcast();

sendOrderedBroadcast();

sendStickyBroadcast();

广播接收:

当Intent对象被发送以后,所有已经加载的BroadCastReceiver会检查加载时的IntentFilter是否与被发送的Intent相匹配,若匹配,会调用BroadCastReceiver的onReceive方法。

所以定义BroadCastReceiver时,要实现onReceive方法。

注:BroadCastReceiver的加载方式有动态加载和静态加载。

注:BroadCastReceiver的生命周期只有十秒左右,所以不要在BroadCastReceiver中做耗时操作。

建议通过Intent让Service做。

广播类型:

普通广播:所有监听该广播的BroadCastReceiver都能收到该广播。

有序广播:按照BroadCastReceiver的优先级顺序接收广播,优先级在intent-filter中的priority中定义,-1000到1000之间,值越大,优先级越高,可以终止广播的继续传播,接收方也可以修改广播内容。

异步广播:不能将处理结果传给下一个接收方,也无法终止。

总结:

普通广播的特点:
4000

1. 同级别接收先后顺序是随机的(无序)。

2. 级别低的后收到广播。

3. 接收方不能截断广播的继续传播也不能处理广播。

4. 同级别动态注册高于静态注册。

有序广播特点:

1. 同级别接收顺序是随机的。

2. 能截断广播的继续传播,高级别的BroadCastReceiver收到该广播后,可以决定是否截断该广播。

3. BroadCastReceiver能截断广播的继续传播,也能处理广播。

4. 同级别动态注册高于静态注册。


静态加载例:

定义BroadCastReceiver:


public class BCR extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));

}
}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //此处为设置过滤信息。
inte.putExtra("msg","内容");
sendBroadcast(inte);静态加载:
//在记录文件中,application标签内。
<receiver android:name="此处省略">
<intent-filter android:priority="优先级-1000到1000">
<action android:name="GL_1"/>
</intent-filter>
</receiver>
动态加载例:
定义BroadCastReceiver:

public class BCR2 extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));

}

}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //设置过滤信息
inte.putExtra("msg","内容");
sendBroadcast(inte);动态加载:
//在Activity中。

IntentFilter intentfilter=new IntentFilter("GL_1");
//上为过滤
BCR2 bcr2=new BCR2();
registerReceiver(bcr2,intentfilter);
有序广播例:
//发送有序广播。
Intent inte2=new Intent();
inte2.putExtra("msg","有序广播");
inte2.setAction("GL_1");
sendOrderedBroadcast(inte2,null);
//以下为先接收到广播的BroadCastReceiver。
public class BCR extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent1)
{
System.out.println(intent1.getStringExtra("msg"));
Bundle bun=new Bundle();
bun.putString("data","处理结果");
setResultExtras(bun);  //将处理结果设置进去。
}

}
//以下为后接收到广播的BroadCastReceiver。
public class BCR2 extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent2)
{
System.out.println(intent2.getStringExtra("msg"));
Bundle bun=new Bundle();
bun=getResultExtras(true); //是否要接收处理结果
String bunstr=bun.getString("data");
System.out.println(bunstr);

}

}










内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: