轻松学android开发之服务与消息广播

上传人:xzh****18 文档编号:56920154 上传时间:2018-10-17 格式:PPT 页数:20 大小:208.70KB
返回 下载 相关 举报
轻松学android开发之服务与消息广播_第1页
第1页 / 共20页
轻松学android开发之服务与消息广播_第2页
第2页 / 共20页
轻松学android开发之服务与消息广播_第3页
第3页 / 共20页
轻松学android开发之服务与消息广播_第4页
第4页 / 共20页
轻松学android开发之服务与消息广播_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《轻松学android开发之服务与消息广播》由会员分享,可在线阅读,更多相关《轻松学android开发之服务与消息广播(20页珍藏版)》请在金锄头文库上搜索。

1、第7章 服务与消息广播,本章介绍的主要内容是Android平台中的另外两个组件,服务Service和消息广播接收者BroadcastReceiver。 Service与Activity类似,它们都表示可执行的程序。只是Service类并不像Activity一样提供与用户交互的表示层,Service是一种后台运行的Android组件。它位于android.app包下。本章将详细讲解Service的应用,并对相关的广播进行相应介绍。,Service是一个具有较长的生命周期的程序。但是它没有用户界面,一直在Android后台运行。当应用程序不需要在前台显示某些界面时,可以使用Service来完成,比

2、如后台的数据计算,从Internet下载数据,后台音乐播放等。,7.1 Service简介,Service的开发共分为两步:定义Service和配置Service。下面依次讲解这两个步骤。 Service的开发共分为两步:定义Service和配置Service。下面依次讲解这两个步骤。 1.定义Service 定义一个Service子类继承于Service, 2.配置Service 在AndroidManifest.xml文件中,配置该Service。有两种配置方法。 第一种是显示配置,只需使用标签声明Service的名称。与其他组件标签(例如)并列位于标签内,为同一个应用程序所用。 第二种是

3、隐式配置,除了声明Service名称之外,还需要为Service配置子标签。通过匹配Action属性,说明该Service可以被哪些Intent启动。,7.1.1 开发Service,Service的生命周期包括运行和停止两个阶段。Service的启动方式有两种:context.startService()和context.bindService()。不同的启动方法,对Service生命周期的影响不同。 使用context.startService()启动Service,访问者与Service没有关联。即使访问者退出了,Service依然运行;使用context.bindService()启动

4、Service,访问者与Service就绑定在一起。访问者一旦退出,Service就终止运行,7.1.2 Service的生命周期,本节我们通过Service的开发,使用两种不同的方法对Service进行操作,观察Service的生命周期,以及状态变化。,7.2 操作Service,Service一般由Activity启动。当Activity调用startService()方法启动Service时,如果Service还没有运行,则Android先调用onCreate(),然后调用onStartCommand()启动Service。Service进入运行状态。stopService的时候直接on

5、Destroy()结束Service。如果是调用者自己直接退出,而没有调用stopService的话,Service会一直在后台运行。,7.2.1 使用context.startService()启动Service,调用context.bindSerivce()方法,绑定Service到Activity,依次执行onCreate()onBind(),Service被启动。调用context.unBindService()解除绑定,Srevice依次调用onUnbind()onDestroy()退出服务。当结束与Service绑定的Activity时,Service也会被终止。,7.2.2 使用

6、context.bindService()启动Service,根据通信方式,Service可以分为两种类型:本地服务(Local Service)和远程服务(Remote Service)本地服务用于应用程序内部,远程服务用于Android系统内的应用程序之间。下面详细讲解这两种Service的通信方式。,7.3 Service通信,当程序通过startService()和stopService()启动、关闭Service时,Service与访问者之间没有太多关系。因此无法进行通信和数据交换。 如果Service和访问者之间需要进行通信,应该调用bindService()绑定Service与访

7、问者,通信结束之后,再调用unBindSevice()解除绑定,退出Service。 绑定Service之后,Service类中的Ibinder onbind(Intent intent) 方法的返回值,将传递给在访问者类中声明的,ServiceConnection的onServiceConnected(ComponentName name,Ibinder service)方法中作参数。这样,访问者就可以通过Inbind对象,实现与Service之间的通信。,7.3.1 本地服务通信,在Android系统中,各应用程序都运行在自己的进程中。进程之间一般无法直接进行通信或者数据交换。Androi

8、d提供了AIDL工具来实现跨进程的通信。 AIDL(Android Interface Definition Language)是一种IDL接口定义语言((Interface Definition Language)语言,用于生成可以在Android设备上两个进程之间进行进程间通信(Internet Process Connection IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)的对象,就可以使用AIDL来实现。,7.3.2 远程服务通信,以上示例都是我们自定义开发的Service服务。其实,Android系统也提供了很多Service服务

9、供用户使用。这些服务通过getSystemService(String serviceName)方法获得,比如第5章中的Notification。下面我们来学习一些常用的系统Service。,7.4 系统提供的Service,TelephonyManager是Android提供的系统服务之一。通关它可以获取手机的各种相关信息,例如设备ID号、SIM卡号等等。,7.4.1 电话管理器TelephonyManager,SmsManager是Android提供的与短信相关的系统服务。该Service使用流程如下: 1.获取SmsManager实例对象 使用该Service之前,首先需要获取该对象。

10、2.调用SmsManager相关方法 SmsManager类中,提供了与短信相关的方法 3.声明PendingIntent对象 在以上两个方法中,都使用到PendingIntent参数。因此在调用SmsManager相关方法之前,需要声明一个PendingIntent对象。 PendingIntent这个类用于处理即将发生的事情。要得到一个pendingIntent对象,使用方法类的静态方法getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, in

11、t, Intent, int) 分别对应着Intent的3个行为:跳转到一个Activity组件、打开一个广播组件和打开一个服务组件。,7.4.2 短信管理器SmsManager,AudioManager是用来控制手机铃声和音量的系统服务。该Service使用流程如下: 1.获取AudioManager实例对象 使用该Service之前,首先需要获取该对象。 2.调用AudioManager相关方法 获取了AudioManager实例对象后,我们就可以调用它的相关方法。AudioManager提供了一系列控制手机音量的方法,7.4.3 音频管理器AudioManager,Android手机中的

12、振动由Vibrator实现。在与用户交互时,常常会用到振动功能,尤其在游戏中,应用广泛,比如爆炸,碰撞等。 1.获取Vibrator实例对象 使用该Service之前,首先需要获取该对象。 2.调用Vibrator相关方法 获取了Vibrator实例对象后,我们就可以调用它的相关方法。,7.4.4 振动器Vibrator,在Android中,广播Broadcast是一种广泛运用在应用程序之间的用于传送消息的机制。而BroadcastReceiver是用来过滤接收并响应Broadcast的一类组件。它可以监听系统全局的广播消息,非常方便的实现系统中不同组件之间通信。,7.5 广播接收者Broad

13、castReceiver,BroadcastReceiver的运行机理非常简单。开发过程如下: 开发BroadcastReceiver的子类,重写其中的onReceive()方法; 注册BroadcastReceiver对象; 将需要广播的消息封装到Intent中,然后调用方法发送出去; 通过IntentFilter对象过滤Intent,处理与其匹配的广播。 1.注册BroadcastReceiver 与其他组件相同,BroadcastReceiver在使用之前,也需要在AndroidManifest.xml中注册静态注册。静态注册的特点是,不管改应用程序是否处于活动状态,都会进行监听。注册B

14、roadcastReceiver使用标签。然后通过标签设置过滤条件。与其他组件(例如)并列位于标签内,为同一个应用程序所用。BroadcastReceiver也可以在代码中注册动态注册。首先创建IntentFilter对象,并设置过滤条件,然后通过Context.registerReceiver()方法来注册,通过Context.unregisterReceiver()方法取消注册。动态注册的特点是,在代码中进行注册后,当应用程序关闭后,就不再进行监听。,7.5.1 开发BroadcastReceiver,Android系统提供了Conte.sendBroadcast()和Context.se

15、ndOrderedBroadcast()两种方法发送广播或有序广播,供BroadcastReceiver接收并处理。 Conte.sendBroadcast()发送的广播,所有满足条件的BroadcastReceiver都会执行其onReceive()方法来处理响应。 Context.sendOrderedBroadcast发送的有序广播。会根据BroadcastReceiver注册时IntentFilter的优先级顺序来执行onReceive()方法。优先级在的android:priority中声明,也可以在代码中通过IntentFilter.setPriority()方法设置。数越大优先级别越高。,2.发送广播,除了接收用户发送的广播之外,BroadcastReceiver还有一个重要的用处,接收系统广播。如果应用需要在系统特定时刻执行某些操作,就可以通过监听系统广播来实现。,7.5.2 接收系统广播信息,通过本章的学习,读者应该很好地掌握Android的后台服务机制和消息广播机制。本章内容重点是Service的开发与通信,以及BroadcastReceiver的开发。系统提供的Service,功能强大,再结合BroadcastReceiver一起使用,是本章学习的难点。二者的运用都涉及到添加对应的用户权限,也需要读者认真掌握。,7.6 小结,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号