android组件之BroadcastReceiver
来源:互联网 发布:淘宝比较好的银饰店 编辑:程序博客网 时间:2024/04/29 20:09
1、Broadcast(广播)
是一种广泛运用在应用程序之间传输信息的机制
2、BroadcastReceiver(广播接收者)
是对发出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播。
3、用途
当开机完成后系统会产生一条广播;
当网络状态改变时系统会产生一条广播
当电池电量改变时,系统会产生一条广播
等等
android为什么要这样设计?
.大大减少开发的工作量和开发周期
.作为应用开发者,只需掌握BroadcastReceiver
使用方法:
发送:
.把信息装入一个Intent对象(如Action、Category)
.通过调用相应的方法将Intent对象以广播方式发送出去
sendBroadcast(); //发送普通的广播
sendOrderBroadcast(); //发送有序广播
sendStickyBroadcast(); //异步广播(粘滞性滞留广播)
接收:
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册的IntentFilter是否与发送的Intent相匹配, 若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都 需要实现onReceive()方法。
注意:BroadcastReceiver需要注册
.静态注册 (在.xml注册)
.代码注册
BroadcastReceiver生命周期只有十秒左右
在BroadcastReceiver里不能做一些比较耗时的操作
应该通过发送Intent给Service,由Service来完成
不能使用子线程
广播的种类:
普通广播(Normal broadcasts)
所有监听该广播的广播接收者都可以监听到该广播。
有序广播(Ordered broadcasts)
按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越
大,优先级越高。可以终止广播意图的继续传播。接收者可以篡改内容。
异步广播(粘滞性滞留广播)
不能将处理结果传给下一个接收者,无法终止广播。
普通广播的特点:
同级别接收先后是随机的
级别低的后收到广播
接受器不能截断广播的继续传播也不能处理广播
同级别动态注册高于静态注册
有序广播的特点:
同级别接收顺序是随机的
能截断广播的继续传播,高级别的广播接收器接收到该广播后,可以决定把该广播是否截断。
接收器能截断广播的继续传播,也能处理广播。
同级别动态注册高于静态注册
demo:
package com.example.mhy.broadcast;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { /** *广播生命周期很短只有十几秒,不能做耗时操作, * 当主线程被杀死之后它所创建的子线程也会随之消亡 * 不能开辟子线程 * 耗时操作交给Service来做 */ private BC2 bc2; private BC3 bc3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //动态注册广播 bc2 = new BC2(); //新建消息过滤器 IntentFilter intentFilter0 = new IntentFilter("BC1"); registerReceiver(bc2, intentFilter0); } public void doClick(View v) { switch (v.getId()) { case R.id.send1: Intent intent = new Intent(); intent.putExtra("msg", "这是一条普通广播"); //设置消息的唯一标志(一般以类名命名) intent.setAction("BC1"); sendBroadcast(intent); break; case R.id.send2: Intent intent2 = new Intent(); intent2.putExtra("msg","这是一条有序广播"); intent2.setAction("BC1"); sendOrderedBroadcast(intent2,null); break; case R.id.send3: //滞留广播不考虑广播的发送和接收顺序 Intent intent3 = new Intent(); intent3.putExtra("msg", "发送一条滞留广播"); intent3.setAction("BC3"); sendStickyBroadcast(intent3);//过时的使用方式 IntentFilter intentFilter = new IntentFilter("BC3"); bc3 = new BC3(); registerReceiver(bc3, intentFilter); break; } } @Override protected void onDestroy() { super.onDestroy(); //如果为动态注册广播接收器 则使用后一定要解除注册 unregisterReceiver(bc2); }}
package com.example.mhy.broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;/** * Created by mhy on 2016/5/7. */public class BC1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String s = intent.getStringExtra("msg"); System.out.println("receiver1收到消息:" + s);// abortBroadcast();// Bundle bundle = new Bundle();// bundle.putString("test", "广播处理的数据");// setResultExtras(bundle); }}
package com.example.mhy.broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;/** * Created by mhy on 2016/5/7. */public class BC2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String s = intent.getStringExtra("msg"); System.out.println("receiver2收到消息:" + s); //有序广播可以截断广播也广播之间也可以传递数据// abortBroadcast();// Bundle bundle = getResultExtras(true);// String s2 = bundle.getString("test");// System.out.println("得到的处理结果是:" + s2); }}
package com.example.mhy.broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;/** * Created by mhy on 2016/5/7. */public class BC3 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("收到了异步广播!"); }}
- Android之BroadcastReceiver组件
- Android组件之BroadcastReceiver
- android组件之BroadcastReceiver
- Android组件之BroadcastReceiver
- android四大组件之BroadCastReceiver
- android 四大组件之 broadcastreceiver
- android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android核心组件之BroadCastReceiver
- Android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android核心组件之BroadCastReceiver
- android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android 四大组件之 BroadcastReceiver
- Android开发之BroadcastReceiver组件
- 频繁Toast的解决办法
- Hadoop MapReduce 统计红楼梦出现次数最多的名字
- Agnostic Learning (不可知学习)
- 【Java】多态和动态绑定中的坑
- HDU 1233 还是畅通工程
- android组件之BroadcastReceiver
- 快速获取文件的行数
- CentOS环境下安装Apache+PHP+Mysql
- Contest 2016-5-7 A(HDU 5615)
- 大数据和云服务领域的我的思考(拙见)
- CodeForces 670C Cinema(排序,离散化)
- C#版 选择法、冒泡法、插入法和快速排序法分析与对比
- 多线程(四)
- 新开的博客