android广播broadcast详解

一、Android广播机制三要素:
  1、广播(Broadcast):用于发送广播。是一种广泛应用的在应用间传输信息的机制
  2、广播接收器(BroadcastReceiver):用于接收广播。是对发出来的Broadcast进行过滤接受并响应的 组件
  3、意图内容(Intent):用于保存广播相关信息的媒介

二、广播的功能和特征:
     1、广播的生命周期很短,经过 调用对象—实现onReceive—结束 整个过程就结束了。从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码。广播对象被构造出来后通常只执行BroadcastReceiver.onReceive方法,便结束了其生命周期。所以有的时候我们可以把它当做函数看也未必不可。
 
  2、和所有组件一样,广播对象也是在应用进程的主线程中被构造,所以广播对象的执行必须是要同步且快速的。也不推荐在里面开子线程,因为往往线程还未结束,广播对象就已经执行完毕被 系统销毁。如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由 Service 来完成。
 
  3、每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应。

静态广播:
1,在mainnifest中注册receiver
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="com.example.administrator.mybroadcastreceiver" />
    </intent-filter>
</receiver>
2,自定义类继承BroadcastReceiver
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"接收到了广播",Toast.LENGTH_SHORT).show();
}
}
3,在主函数中发送广播
Intent intent = new Intent();
intent.setAction("com.example.administrator.mybroadcastreceiver");
sendBroadcast(intent);
动态广播:
直接在代码中调用,在onCreate中绑定registerReceiver。在ondestory中解绑unregisterReceiver
receiver = new Receiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.administrator.mybroadcastreceiver");
registerReceiver(receiver, filter);
mButtonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.example.administrator.mybroadcastreceiver");
sendBroadcast(intent);
}
});
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
系统广播:
直接在静态注册表中,把MyReceiver和系统广播绑在一起。有的需要添加系统权限
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="com.example.administrator.mybroadcastreceiver" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> //网络变化,如开关WiFi时发出广播
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.broadcast_package_removed" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值