标签:
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