内容正文:
第11章 Service与BroadcastReceiver
Service简介
电话管理器
短信管理器
音频管理器
手机闹钟服务
接收广播消息
掌握Service组件的使用方法
掌握BroadcastReceiver接收系统广播
掌握Service的生命周期
掌握IntentService的功能和用法
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
11.1
Service简介
11.1.1
创建和配置Ser-vice
11.1.2
启动和停止
11.1.3
绑定本地Service
11.1.4
Service的生命周期
11.1.5
IntentService简介
目录
Contents
初心至善 匠心育人
11.1 Service简介
Service与Activity很相似,它甚至可以认为是没有界面的Activity。Service有自己的生命周期,其创建、配置的方式也与Activity很相似。接下来详细介绍Service的开发。
初心至善 匠心育人
11.1 Service简介
11.1.1 创建和配置Service
Service的创建过程与Activity很相似,首先定义一个继承Service的子类,然后在清单文件AndroidManifest.xml中配置该Service。
定义Service子类,就是继承Service并重写相应的方法。
初心至善 匠心育人
11.1 Service简介
11.1.1 创建和配置Service
上面定义的Service子类DemoService重写了几个方法,具体解释如表所示。
另外需要注意的是,Service与Activity都是从Context派生出来的,因此它们都可以调用Context里定义的如getResources()、getContentResolver()等方法。
初心至善 匠心育人
11.1 Service简介
11.1.1 创建和配置Service
上例中定义完DemoService后要在清单文件AndroidManifest.xml配置该Service,具体配置代码如下:
上面配置代码中enabled属性是指该Service是否能够被实例化,默认值为true,表示能被实例化。
初心至善 匠心育人
11.1 Service简介
11.1.1 创建和配置Service
当Service开发完成之后,接下来就可在程序中运行该Service了。在Android系统中运行Service有两种方式:
通过Context的startService()方法:通过该方法启动Service,访问者与Service之间没有关联,即使访问者退出了,Service也仍然运行。
通过Context的bindService()方法:通过此方法启动Service,访问者与Service绑定在一起,访问者一旦退出,Service也被销毁。
下面先示范第一种方式运行Service。
初心至善 匠心育人
11.1 Service简介
11.1.2 启动和停止Service
下面示例通过Activity访问Service,该Activity的界面包括两个Button,一个Button用于启动Service,另一个Button用于关闭该Service。这里就不展示界面文件中的代码,Java代码如例所示。
上面代码中第7、10、13行是关键代码,直接调用Context中定义的startService(intent)与stopService(intent)方法即可启动、停止Service。
初心至善 匠心育人
11.1 Service简介
11.1.2 启动和停止Service
运行程序,单击三次启动Service的按钮,打印出的日志结果如图所示:
从图中可以看出,虽然单击了三次启动Service的按钮,但是onCreate()方法只调用了一次,onStartCommand()方法调用了三次,验证了每次启动Service都会调用onStartCommand()方法。最后单击关闭Service的按钮,onDestroy()方法被调用,Service被销毁。
初心至善 匠心育人
11.1 Service简介
11.1.3 绑定本地Service
11.1.2节介绍了在Android系统中运行Service的第一种方式,本节来介绍第二种:bindService()方式。
Context的bindService()方法的完整参数为bindService(Intent service, ServiceConnection conn, int flags),而startService()方法中只有一个参数startService(Intent service)。因此当Service和