BroadcastReceiver总结
来源:互联网 发布:ubuntu命令行安装中文 编辑:程序博客网 时间:2024/05/17 21:47
一、广播机制简介
Android中引入了广播机制,用于组件之间、组件内部的消息传递。广播机制主要分为两个方面:广播发送者和广播接收器(BroadcastReceiver——对发送的广播进行过滤接收并响应)。发送者发出一条广播,“订阅”了该广播的接收器就能收到这条广播,并作出相应的响应。在Android中,广播被广泛地使用,例如:在开机后系统会产生一条广播,接收到该广播的应用程序就能启动服务。又如:应用程序在完成某个事件后发出一条广播,通知另一个应用程序。即广播有系统广播,应用程序也可以自定义广播。
二、广播的三种类型
- 普通广播(Normal Broadcasts):所有监听该广播的接收器都能收到广播,且没有先后顺序。接收器不能截断广播,也不能处理广播内容。
- 有序广播(Ordered Broadcasts):按照接收者的优先级顺序接收广播,优先级高者可以截断广播。接收者可以对广播内容进行处理。
- 异步广播:(粘滞性滞留广播):不能将处理结果传给下一个接收者,无法终止广播。
三、BroadcastReceiver的生命周期
每次广播到来时,会创建一个BroadcastReceive对象,并执行onReceive()方法,执行完后,该对象就会被立即销毁。BroadcastReceive整个生命周期只有十秒左右,如果onReceive()方法在十秒内没有执行完,程序会报错。因此,不能在onReceive()方法中做耗时操作,可以交由Service来完成。
四、BroadcastReceiver用法
1.自定义BroadcastReceiver
继承BroadcastReceiver,实现抽象方法onReceive(context,intent)。在onReceive方法中写收到广播后的响应事件。
public class TestBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"Received Broadcast",Toast.LENGTH_LONG).show(); }
如果接收的是有序广播,则可在onReiceive方法中对广播内容进行处理或者调用abortBroadcast()方法来截断广播。
2.注册BrasdcastReceiver——静态 or 动态注册
1)静态注册
静态注册是在AndroidManifest.xml文件中配置的。通过这种方式注册的广播为常驻型广播,当应用程序关闭后,有相应事件触发程序还是会被系统自动调用运行。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.ginny.test"> <application ... android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.test.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".AnotherBroad"> <intent-filter android:priority="100"> <!--设置优先级。数字越大优先级越大(同优先级,动态注册优先于静态注册)--> <action android:name="com.example.MY_text"> </action> </intent-filter> </receiver></application></manifest>
在application标签中添加一个receiver标签,通过android:name指定接收器,然后在中添加要接收的广播。
2)动态注册
通过代码在.Java中注册。通过这种方式注册的广播会跟随Activity的生命周期,需要在Activity结束前调用unregisterReceiver(receiver)方法移除它。
TestBroadcastReceiver receiver=new TestBroadcastReceiver();IntentFilter filter=new IntentFilter();filter.addAction("com.example.MY_text");registerReceiver(receiver, filter);
动态注册的广播一定要注销:
@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); }
五、发送广播
1.发送普通广播
创建一个Intent对象,传入要发送的广播的值,再调用sendBroadcast(intent)方法将广播发送出去。
Intent intent = new Intent("com.example.MY_text");sendBroadcast(intent);
2.发送有序广播
调用sendOrderedBroadcast(intent,receiverPermission)方法。该方法要传入两个参数,其中receiverPermisson是接收权限,可以为null,这里设置一个“TestPermission”权限。
Intent intent = new Intent("com.example.MY_text");sendOrderedBroadcast(intent,“TestPermission”);
在manifest中添加“TestPermission”权限。
<permission android:name="TestPermission" android:protectionLevel="normal"> </permission>
声明要使用该权限
<uses-permission android:name="TestPermission"/>
3.发送异步广播
调用sendStickyBroadcast(intent)方法。
Intent intent = new Intent("com.example.MY_text");sendStickyBroadcast(intent);
发送异步广播需要在manifest中声明权限”android.permission.BROADCAST_STICKY”
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
异步广播处理完之后的intent依然存在,直到把它去掉,即调用方法removeStickyBroadcast(intent);
- BroadCastReceiver 总结
- BroadCastReceiver总结
- BroadcastReceiver总结
- BroadcastReceiver总结
- BroadcastReceiver总结
- BroadcastReceiver总结
- android中BroadCastReceiver总结
- BroadcastReceiver基础总结
- Android BroadcastReceiver总结
- Android BroadcastReceiver学习总结
- Android BroadcastReceiver 广播总结
- Service和BroadcastReceiver总结
- Study-android BroadcastReceiver总结
- android BroadcastReceiver 总结
- Android BroadcastReceiver学习总结
- BroadcastReceiver使用总结
- Android总结 - BroadcastReceiver
- BroadcastReceiver要点总结
- oracle查询约束
- 矩阵,向量求导
- 八、分隔符和定长解码器的应用(2)
- mysql 优化
- 乱码问题
- BroadcastReceiver总结
- centos7 mysql数据库安装和配置
- 我的Java第二课下
- QSettings操作配置文件
- JFinal连接数据库失败
- 微信开发–带参数的二维码
- android控件05---RadioButton(RadioGroup)
- mac上java,android home的配置
- Python-json与pickle数据序列化