Android基础之初识Broadcast Receiver
来源:互联网 发布:办公楼网络改造方案 编辑:程序博客网 时间:2024/06/01 07:41
Android基础之初识Broadcast Receiver
Broadcast(广播)
Android系统或应用程序会在产生某个事件时发送广播,比如网络状态改变、开机、电量改变和接收短信等。应用程序可以监听这些广播并做处理。
Broadcast Receiver是什么
BroadcastReceiver(广播接收者)是Android四大组件之一,用来接收并响应来自系统和应用中的广播。通常一个广播可以被多个广播接收者所接收。
Broadcast Receiver的生命周期
Broadcast Receiver的生命周期是从被调用开始,再到onReceiver方法执行完成之后结束。onReceiver方法必须在10秒内执行完成,否则Android系统会出现ANR(Application Not Responding)异常。所以不要在onReceiver方法中执行耗时的操作。如果需要在BroadcastReceiver中执行耗时的操作,可以通过Intent启动Service来完成,但不能绑定Service。
Broadcast的类型
①普通广播 (Normal broadcasts)
所有监听该广播的广播接收者都可以监听到该广播,并且是没有先后顺序。异步广播使其可以同一时间被所有的接收者接收到。广播的传递效率比较高,不能停止传播。
②有序广播 (Ordered broadcasts)
按照广播接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,优先级在-1000 到1000 之间 ,值越大优先级越高 。接收者可以拦截广播,即终止广播的继续传播 。优先级高的广播接收者可以在广播中放入信息,传递给下一个广播接收者。
③应用内广播(Local Broadcast)
在本应用范围内传播的广播,不会造成隐私数据泄露,不会因为别的应用伪造广播而造成安全隐患。其相比在系统内发送全局广播,更高效。
④粘性广播(Sticky Broadcast)
粘性广播在发送后,其Intent会一直保留到广播事件结束,这种广播也没有所谓的10秒耗时限制。发送粘性广播需要权限android.Manifest.permission.BROADCAST_STICKY。
⑤系统广播(System Broadcast)
Android系统中内置了多种系统广播,每个广播都有特定的action,常用的系统广播对应的action如下:
BroadcastReceiver的创建
在我们要创建自己的BroadcastReceiver时,需要继承android.content.BroadcastReceiver,并实现其onReceive方法。代码如下:
package com.example.receiver;import android.content.BroadcastReceiver;import android.content.Intent; import android.util.Log; import android.content.Context; public class MyReceiver() extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent){ //获取广播中携带的数据,有多种数据类型 String msg = intent.getStringExtra("key"); Log.d("MyReceiver:", "MyReceiver"); }}
BroadcastReceiver的注册
BroadcastReceiver在创建后也需要先注册才能使用。在Android 的广播机制中,动态注册的BroadcastReceiver优先级是要高于静态注册。
①静态注册
静态注册需要在AndroidManifest.xml文件中配置,代码如下:
<receiver android:name="com.example.receiver.MyReceiver"> <intent-filter> <action android:name="android.intent.action.MY_BROADCAST" android:priority="999" /> <!-- 设置最高优先级 --> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
②动态注册
动态注册的属于常驻型,这个广播接收者会在程序运行的整个过程中一直存在,不会被注销掉,当程序被退出后不会再接收到该广播。动态注册需要在代码中设置IntentFilter和注册BroadcastReceiver,代码如下:
MyReceiver myReceiver = new MyReceiver(); //创建IntentFilter IntentFilter intentFilter = new IntentFilter(); intentFilter .addAction("android.intent.action.MY_BROADCAST"); //注册registerReceiver(myReceiver, intentFilter);
动态注册的BroadcastReceiver跟随注册它组件相关联,所以在组件销毁时需要解除注册,否则系统会抛出一个异常。解除注册代码如下:
unregisterReceiver(myReceiver );
发送Broadcast
广播接收器介绍完呢,那怎么发送广播呢,代码如下:
Intent intent = new Intent(); intent.setAction("android.intent.action.MY_BROADCAST");//在广播中放入数据,有多种参数类型的函数供使用intent.putExtra("key", "value");//发送普通广播sendBroadcast(intent);//发送有序广播 //receiverPermission为权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。sendOrderedBroadcast(intent,receiverPermission);
- Android基础之初识Broadcast Receiver
- Android-基础-broadcast receiver
- Android基础系列之Broadcast Receiver
- android 之broadcast receiver
- Android Broadcast Receiver 基础详解
- Android基本之Broadcast Receiver
- 精通android之Broadcast Receiver
- Android基本之Broadcast Receiver
- Android组件之Broadcast Receiver
- android之Broadcast Receiver详解
- Android四大组件之Broadcast Receiver
- Android的四大组件之Broadcast Receiver
- Android四大组件之Broadcast Receiver
- Android 四大组件 之 Broadcast/Receiver 流程
- Android之广播接收者 broadcast receiver
- Android 四大组件之Broadcast receiver
- Android四大组件之Broadcast Receiver
- Android四大组件之Broadcast Receiver
- js中在window.onload中调用function函数遇到的疑惑
- Pronunciation
- Weex基于Vue2.0开发框架模板搭建
- 梦想的开端
- L1-011. A-B
- Android基础之初识Broadcast Receiver
- Java设计模式《四》代理模式
- 工作流系统的组成
- src和href的区别
- Android 动画分析之Tween动画分析
- 计算机科学和编程导论-week1-计算机科学简介
- C语言sscanf()的用法
- python2.7 print end 问题
- Java的instanceof理解