chapter06第6章 广播机制_第1页
chapter06第6章 广播机制_第2页
chapter06第6章 广播机制_第3页
chapter06第6章 广播机制_第4页
chapter06第6章 广播机制_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章广播机制6

6.1广播机制的概述6.2广播接收者6.3自定义广播与广播的类型3广播接收者重点了解掌握2自定义广播广播的类型拦截有序广播1学习目标6.1广播机制的概述主讲内容Speechcontent主讲内容第6章广播机制6.1广播机制的概述通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的。如果有重要通知,会发送一条广播来告知全校师生。为了便于发送和接收系统级别的消息通知,Android系统也引入了一套类似广播的消息机制。Android中的广播(Broadcast)机制用于进程/线程间通信,该机制使用了观察者模式,观察者模式是一种软件设计模式,该模式是基于消息的发布/订阅事件模型,该模型中的消息发布者是广播机制中的广播发送者,消息订阅者是广播机制中的广播接收者,广播机制的具体实现流程,如下图所示。6.1广播机制的概述

消息发送者(广播发送者)2、发送广播(Binder机制)处理中心(AMS)根据消息发布者要求,在已注册列表中,寻找合适的消息订阅者,寻找依据是(IntentFilter/Permission)3、发送广播1、注册广播接收者(Binder机制)

消息订阅者(广播接收者)上述图中的广播机制的实现流程具体如下:1、广播接收者是通过Binder机制在AMS(ActivityManagerService)中进行注册的

(在6.2小节会讲解广播接收者的注册)。2、广播发送者是通过Binder机制向AMS发送广播。3、AMS查找符合相应条件(IntentFilter/Permission)的广播接收者

(BroadcastReceiver),将广播发送到相应的消息循环队列中。4、执行消息循环时获取到此广播,会回调广播接收者(BroadcastReceiver)中的onReceive()方法并在该方法中进行相关处理。应用场景同一app内部的同一组件内的消息通信(单个或多个线程之间);同一app内部的不同组件之间的消息通信(单个进程);同一app具有多个进程的不同组件之间的消息通信;不同app之间的组件之间消息通信;Android系统在特定情况下与App之间的消息通信。6.1广播机制的概述6.2广播接收者主讲内容Speechcontent主讲内容6.2.1什么是广播接收者6.2.2广播接收者的创建第6章广播机制实际生活中,电台用于发送广播,收音机用于接收广播。发送广播消息广播接收者广播特点Android系统中内置了很多广播,例如手机开机完成、电池电量不足时都会发送一条广播。为了监听来自系统或者应用程序的广播事件,Android系统提供了BroadcastReceiver(广播接收者)组件。当Android系统产生一个广播事件时,可以有多个对应的广播接收者接收并进行处理。BroadcastReceiver2Android系统或其他程序产生的广播事件BroadcastReceiver1BroadcastReceiver36.2.1什么是广播接收者6.2.2广播接收者的创建广播接收者的创建方式有两种,具体如下:一种是通过在应用程序的包中创建一个类继承BroadcastReceiver并重写onReceive()方法来实现的。一种是通过选中应用程序中的包,右击选择【New】→【Other】→【BroadcastReceiver】选项来创建的。注意:

创建完广播接收者之后还需要对广播接收者进行注册才可以接收广播。6.2.2广播接收者的创建选择【New】→【Other】→【BroadcastReceiver】选项来创建广播如下:广播接收者名称创建完成

publicclassMyReceiverextendsBroadcastReceiver{publicMyReceiver(){}@OverridepublicvoidonReceive(Contextcontext,Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}创建广播接收者在该方法中实现广播接收者的相关操作6.2.2广播接收者的创建receiver=newMyBroadcastReceiver();//实例化广播接收者//实例化过滤器并设置要过滤的广播Stringaction="vider.Telephony.SMS_RECEIVED";IntentFilterintentFilter=newIntentFilter();intentFilter.addAction(action);registerReceiver(receiver,intentFilter);//注册广播动态注册动态注册广播,动态注册的广播接收者是否被注销依赖于注册广播的组件,当组件销毁时,广播接收者也随之被注销。6.2.2广播接收者的创建protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);MyReceiverreceiver=newMyReceiver();Stringaction="vider.Telephony.SMS_RECEIVED";IntentFilterintentFilter=newIntentFilter();intentFilter.addAction(action);registerReceiver(receiver,intentfilter);}protectedvoidonDestroy(){super.onDestroy();unregisterReceiver(receiver);}动态注册注册广播当Activity销毁时,取消注册实例化过滤器并设置要过滤的广播6.2.2广播接收者的创建<?xmlversion="1.0"encoding="utf-8"?><manifest……….><application………><receiverandroid:name=".MyReceiver"android:enabled="true"android:exported="true"><intent-filter><actionandroid:name="ent.action.ACTION_POWER_CONNECTED"/></intent-filter></receiver></application></manifest>静态注册静态注册广播,在小于Android8.0的设备上,只要设备处于开启状态,广播接收者就能接收到广播。6.2.2广播接收者的创建6.3自定义广播与广播的类型主讲内容Speechcontent主讲内容6.3.1自定义广播6.3.2广播的类型第6章广播机制自定义广播当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。公共消息区自定义广播广播接收者发送消息监听消息当自定义广播发送消息时,会储存到公共消息区中,而公共消息区中如果存在对应的广播接收者,就会及时的接收这条信息。6.3.1自定义广播广播的类型Android系统提供了两种广播类型,有序广播和无序广播,开发者可根据需求为程序设置不同的广播类型。无序广播无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会接收到此消息,但接收的顺序不确定。按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕后,才会继续传递。有序广播6.3.2广播的类型发送广播广播接收者1广播接收者2广播接收者3优先级最高优先级较高优先级最低发送广播广播接收者1广播接收者2广播接收者36.3.2广播的类型优先级//动态注册MyReceiver广播

MyReceiver

one=newMyReceiver();In

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论