当前课程知识点:Android应用开发基础 > 第六章 Android服务 > 6.3 自定义服务 > 6.3 自定义服务
本节我们介绍如何使用自定义服务
在上一讲我们详细介绍了系统服务
如图所示
Android系统为了
降低系统服务的编程难度
研发了大量Manager组件
这些独立的管理组件
可以简化访问系统服务的难度
自定义的服务跟Activity的级别差不多
但不能自己运行 只能后台运行
研发人员根据不同的需要
自行开发的服务
可以和其他组件进行交互
service可以在很多场合的应用中使用
比如播放多媒体的时候
用户启动了其他Activity
这个时候程序要在后台继续播放
还有比如检测SD卡上文件的变化
还有在后台
记录你地理信息位置的改变等等
服务总是藏在后台的
往往与活动组件等其他组件
保存在同一个应用程序中
service生命周期
没有activity生命周期那么复杂
如图所示
Service的启动有两种方式
context.startService ()
和context.bindService ()
首先我们介绍startService ()
同一应用在任意地方
调用startService ()方法
都能启动Service
然后系统会自动调用
onCreate () onStartCommand ()方法
这样启动的Service会一直运行在后台
直到stopService ()方法被调用
另外如果一个Service已经被启动
其他代码再想调用startService ()方法
则不会执行onCreate ()
但会重新执行一次onStartCommand ()
下面我们以一个实例
来学习service生命周期的函数调用关系 ()
1 新建一个继承于Service的类
代码如图所示
1.1 依次下列重载实现方法
onCreate () onStartCommand ()
1.2 依次在上述的重载函数使用Log
进行标签的标记
2 实现服务的开启和关闭
2.1 使用startService startIntent开启服务
2.2 使用stopService stopIntent关闭服务
2.3 在Xml配置信息文件中
注册MyService服务
如图所示
是使用startService
开启服务的生命周期展示效果图
3 第一次点击启动服务
系统会自动调用
onCreate () onStartCommand ()方法
第二次点击启动服务
则不会执行 onCreate ()
但会重新执行一次onStartCommand ()
点击关闭服务
系统会调用onDestroy ()方法
下面我们介绍绑定服务bindService ()
使用bindService ()方法启动时
系统会自动调用onCreate () onBind ()
service会和客户端绑定起来
客户端停止
则service也会停止
绑定服务中onBind ()
将返回给客户端一个IBind接口实例
IBind允许客户端回调服务的方法
比如得到Service的实例
运行状态或其他操作
这个时候调用者 例如Activity
会和Service绑定在一起
Activity退出了
Service就会调用
onUnbind->onDestroy依次退出
下面是下载应用程序的具体实例
主Activity视图绑定Service
如图所示
1 服务启动了一个下载功能
下载功能模块包括
开始下载和获取下载进度两个功能
2 Activity如果用startService启动服务
Activity不能获取下载的进度
和开启下载这两个功能
3 Activity使用bindService绑定服务
Activity通过onBind
获取了下载功能的实例对象
可以使用服务中的下载功能接口
获取下载进度
下面我们看一下具体的实现过程
1 新建一个继承于Binder的类
DownloadBinder
依次实现startDownload
和getProgress这两个接口
2 MyService中
新建一个DownLoadBinder对象
onBind接口中返回DownLoadBinder对象
3 Acvitivity定义ServiceConnection类
和DownLoadBinder对象并初始化
ServiceConnection对象的初始化
必须实现onServiceDisconnected回调方法
和onServiceConnected
绑定服务成功后
服务通过这个回调方法
将服务MyService中的DownloadBinder对象
通过IBinder service对象传回
Activity中的mDownloadBinder对象
就可以调用服务中的下载功能接口
4 Activity中绑定MyService服务
代码如图所示
4.1 新建一个服务意图
4.2 通过bindService将Activity与服务绑定
5 Activity中调用Myservice服务中的
下载和获取进度功能
如图所示
我们看一下实现的效果
点击绑定服务后
系统会自动调用
onCreate () onBind ()两个方法
点击下载和获取进度
调用了下载功能中的
startDownload和getProgress两个接口
根据Log的日志
我们可以看到
视图和服务都处于同一个线程
这就是我们自定义服务的全部内容
-Android Studio4.1.2安装常用问题汇总2021.3.15
-1.1 Android概述
--1.1 Android Studio安装与配置-实践案例
-1.1 Android概述--作业
-1.2 Android程序
-1.2 Android程序--作业
-1.3 Android程序调试
-1.3 Android程序调试--作业
-2.1 Activity概述
-2.1 Activity概述--作业
-2.2 Activity应用
-第2章 Android视图--2.2 Activity应用
-3.1 Activity布局
-3.1 Activity布局--作业
-3.2 Android基础组件
-3.2 Android基础组件--作业
-3.3 Android中级组件
-3.3 Android中级组件--作业
-3.4 Android适配器
-3.4 Android适配器--作业
-4.1 Fragment碎片组件
-4.1 Fragment碎片组件--作业
-4.2 ViewPager翻页类组件
-4.2 ViewPager翻页类组件--作业
-讨论:fragment与activity的生命周期有哪些不同?
-5.1 Android广播概述
-5.1 Android广播概述--作业
-5.2 Android广播工作原理
-5.2 Android广播工作原理--作业
-5.3 自定义广播
-第5章 广播--5.3 自定义广播
-5.4 有序广播
--5.4有序广播
-第5章 广播--5.4 有序广播
-6.1 系统服务概述
-6.1 系统服务概述--作业
-6.2 访问系统服务
-6.2 访问系统服务--作业
-6.3 自定义服务
-第6章 Android服务--6.3 自定义服务
-6.4 多线程
--6.4 多线程
-第6章 Android服务--6.4 多线程
-7.1 Android运行权限
-7.1 Android运行权限--作业
-7.2 URL URI概述
-第7章 内容提供者ContentProvider--7.2 URL URI概述
-7.3 ContentProvider概述
-第7章 内容提供者ContentProvider--7.3 ContentProvider概述
-7.4 访问通讯录
-第7章 内容提供者ContentProvider--7.4 访问通讯录
-7.5 课后作业案例
-8.1 相机服务
--8.1 相机服务
-8.1 相机服务--作业
-8.2 音视频服务
-8.2 音视频服务--作业
-9.1 网络服务概述
-9.1 网络服务概述--作业
-9.2 网络框架
--9.2 网络框架
-9.2 网络框架--作业
-9.3 Json
--9.3 Json
-第9章 网络技术--9.3 Json
-9.4 Volley
-第9章 网络技术--9.4 Volley
-10.1 文件存储
--10.1.3 实践案例-SharedPreference文件读写
-10.1 文件存储--作业
-10.2 数据库存储
-10.2 数据库存储--作业
-第1章 实训简介以及开发环境配置
-第2章 在线音乐播放器整体设计以及服务端开发
-第3章 在线音乐播放器-客户端开发
-第4章 在线音乐播放器-完整版
-第5章 QQ聊天项目
-第6章 在线点餐系统