菜鸟学习之 Android Service 组件

本贴最后更新于 2845 天前,其中的信息可能已经水流花落

一、什么是 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查看服务:
  • 安卓开发
    1 引用
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...