BroadCast即为广播,为安卓四大组件之一,用于在应用程序和Activity间传输信息。一条广播,分为发送和接收两部分,发送方经过Intent存储信息,并进行发送。接收方经过BroadCastReceiver来接收消息。若是要指定接受的消息类型,则能够经过过滤器intentfilter来过滤。BroadCastReceiver的生命周期很短,只有十秒左右,因此一些耗时操做不能在接收方进行,而须要接收方把相应信息传给Service,并在Service中进行。经常使用的广播方式有两种:普通广播和有序广播。这篇博文先介绍普通广播。android
普通广播主要有以下几个特色:ide
1.同级别的接受顺序随机spa
2.级别低的后收到广播code
3.接收器不能拦截广播也不能修改广播内容(若拦截或修改则会报错)对象
4.同级别动态注册高于静态注册blog
如文章开篇所言,发送广播,是经过Intent对象来发送的,这里以发送简单的字符串为例,代码以下:继承
Intent intent=new Intent(); intent.putExtra("test","普通广播"); intent.setAction("NORMAL"); //设定广播的Action,用于过滤 sendBroadcast(intent);
建立一个类继承BroadcastReceiver类,并实现onReceive方法便可:生命周期
public class BC1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text=intent.getStringExtra("test"); Toast.makeText(context,"BC1"+text,Toast.LENGTH_SHORT).show(); } }
静态注册是在Manifest文件中声明,代码以下:字符串
<receiver android:name=".BC1"> <intent-filter android:priority="100"> <action android:name="NORMAL"/> </intent-filter> </receiver>
其中,action即为过滤所用的关键字,priority为广播的级别,范围在-1000和1000之间,数字大的级别高。get
动态注册实在Activity中注册,代码以下:
IntentFilter intentFilter = new IntentFilter("NORMAL"); BC2 bc2 = new BC2(); registerReceiver(bc2,intentFilter);
须要注意的是,因为是在Activity中注册的,当Activity中止时,广播也就没法接收了。