一、什么是 Android Service
本地服务(Local Service ):用于应用程序内部的服务。
远程服务(RemoteService): 用于[Android](http://lib.csdn.net/base/android "Android知识库")系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。
二、Android Service 的启用方法和停止方法
1\. 通常本地服务通过Context.startService()来启用,调用Context.stopService()来停用服务;而在Service内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。
2.通过Context.bindService()来建立连接并启用服务,调用 Context.unbindService()关闭连接。
三、Android Service 的生命周期
AndroidService 的生命周期与Acitivity相似,但也有不同的地方:
**onStart()方法:**Context.startService(Intent)启用一个服务,如果服务还没有运行,Android将启用它并在onCreate()方法后调用其onStart()方法;如果服务已经在运行了,则onStart()方法在此被Intent调用;
**onBind()方法:**如果一个客户端需要持久的连接到一个服务,那么他可以调用Context.bindService方法。如果这个服务没有运行方法将通过调用onCreate方法去创建这个服务但并不调用onStart方法来启动它。相反,onBind方法将被客户端的Intent调用,并且它返回一个IBind对象以便客户端稍后可以调用这个服务。同一服务被客户端同时启动和绑定是很正常的。
**onResume、onPause以及onStop:**因为回调服务都是没有界面的,所以这些方法都是不需要的。
**onDestory()方法:**与Activity一样,当一个服务被结束是onDestroy方法将会被调用。当没有客户端启动或绑定到一个服务时Android将终结这个服务。与很多Activity时的情况一样,当内存很低的时候Android也可能会终结一个服务。如果这种情况发生,Android也可能在内存够用的时候尝试启动被终止的服务,所以你的服务必须为重启持久保存信息,并且最好在onStart方法内来做。
四、Android Service 生命周期的管理
**纯粹的绑定service**:Android系统会自动销毁和所有客户端接触绑定的Service。
**实现onStartCommand()回调方法的Service:**必须显式地停止service,因为service此时被看做是开启的。这种情况下,service会一直运行到它自己调用 stopSelf()或另一个组件调用stopService(),不论它是否和客户端绑定。
五、Android Service 的测试
1.ServiceTestCase继承于JunitTestCase类,简要继承图如下:
2.. [测试](http://lib.csdn.net/base/softwaretest "软件测试知识库")环境的初始化,可以通过ServiceTestCase.startService()和ServiceTestCase.bindService()来完成测试环境的初始化工作
3\. 调用Context.startService()或者Context.bindService()后要确定onCreate()方法被正确地调用
4.当调用Context.stopService(), Context.unbindService(), stopSelf()或者stopSelfResult()等方法时要确定onDestroy()方法被正确地调用。
5.服务能够正确地处理Context.startService()的多次调用,只有第一次调用才会触发Service.onCreate()方法,但是每次都会调用Service.onStartCommand()方法。
6.startService()不会嵌套调用,因此对Context.stopService()或者 Service.stopSelf() ( stopSelf(int)不再此列)的一次调用就应该能够终止服务。
7.测试服务在实现上的逻辑正确性。
测试点
一、系统服务
通过adb shellservice list 来查看系统服务:
二、定位服务
1.设置-位置按钮打开:
a)地图能定位到手机位置
b)用adb shell dumpsys location来查看服务:
2.设置-位置按钮关闭:
a)地图无法定位到手机位置
b)用adb shell dumpsys location来查看服务:
三、第三方 app(QQ 音乐后台播放服务)
1\. 播放音乐时切换至后台
a)音乐正常播放;
b)通过 adb shell activity services查看服务:
服务处于活动状态
2.点击消息栏关闭按钮
a)音乐停止播放
b)通过 adb shell activity services查看服务:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于