Android Service

第七章 Service

Service是一个长期运行在后台的用户组件,没有用户界面。即使切换到另一个应用程序,服务也可以在后台运行,因此服务更适合执行一段时间而又不需要显示界面的后台操作,例如下载数据,播放音乐等。

7.1 服务的创建

服务是Android四大组件之一,它的创建和广播接收者类似,File -> New -> Service - >Service。

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

onBind方法用于绑定服务,并返回一个IBind对象。服务创建完成后会自动在AndroidManifest.xml文件中对服务进行注册。

7.2 服务的生命周期

服务的启动方式有两种,分别是startService和bindService.使用不同的方式启动服务,其生命周期也是不同的。

开启服务(startService)

服务一旦开启就与调用者没有任何关系, 当调用者Activity退出时,服务仍在运行,不会影响后台service的运行。

在Activity中不能调用服务里面的方法

绑定服务(bindService)

通过绑定方式开启服务,服务跟服务不求同生,但求同死。如果调用者的Activity退出了,那他绑定的服务也会跟着退出。

在Activity中能调用服务里面的方法
————————————————
版权声明:本文为CSDN博主「ArThur_Bob」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/windownew11/article/details/9301211

  • onCreate() 第一次创建服务时执行的方法
  • onDestroy() 服务被销毁时执行的方法
  • onStartCommand() 客户端通过调用startService方法启动服务时执行该方法;
  • onBind() 客户端通过调用bindService方法启动服务时执行该方法;
  • onUnbind() 客户端通过调用unBindService方法断开服务绑定时执行该方法;

7.4 服务的通信

前面讲了服务的两种启动方式,可以发现通过绑定开启服务后,服务与Activity之间是可以通信的,通过Activity可以控制服务进行一些操作,下面针对Activity与服务之间的通信进行详细讲解。

7.4.1 通信方式

通信方式有两种,一种是本地服务通信,一种是远程服务通信.本地服务通信是指应用程序内部的通信,远程服务通信是两个程序之间的通信。使用这两种方式通信时,必须保证服务是以绑定方式开启的。

  1. 本地服务通信

    在使用本地服务通信时,首先需要创建一个Service类,该类会提供一个onBind方法,onBind方法的返回值是一个IBinder对象,IBinder对象会作为参数传递给ServiceConnection类中的onServiceConnected()方法,这样访问者就能通过IBinder对象与Service进行通信。

  2. 远程服务通信

    在安卓系统中,各个程序都运行在自己的进程中,如果想要完成不同进程间的通信,就需要使用远程服务通信。远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言,其语法格式非常简单,与java中定义接口很类似,但是存在几点差异:

    • AIDL定义接口的源代码必须以.aidl结尾
    • AIDL接口中用到的数据类型,除了基本数据结构及String,List, Map, CharSequence之外,其他类型全都需要导包,即使他们在同一个包中。data/data/cn.luoxin88.musicplayer/qqq.mp3
上一篇:android 栈


下一篇:Android中的内存泄漏原因分类及解决方式