Android Service组件

  Service是Android系统提供的四大组件之一,它的地位和Activity的并列的,只不过没有Activity的使用频率高。顾名思义Service就是运行在后台的一种服务程序,一般情况下,很少和用户交互,最大的特点就是没有可视化界面。

          定义一个Service类只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidMainifest.xml配置文件中通过<service>或者使用bindService()方法来绑定一个存在的Service,还可以通过RPC(远程进程调用)机制来实现不同进程间Service的调用。

 Service是什么?        

1、Service 是一个运用程序组件;

2、Service 没有图形化界面;

3、Service通常来处理一些耗时较长的操作;

4、可以使用Service更新Content Provider,发送Intent以及启动系统的通知等等。

Service不是什么?

1、Service不是一个单独的进程;

2、Service不是一个线程。

启动和停止Service

      一旦定义好一个Service就可以在其他组件中启动该Service来使用它了。启动一个Service使用Context.startService(Intent intent)方法,这个与启动Activity类似,也是传递一个Intent。当我们调用startService()方法时,被调用的Service会调用它的onCreate()方法(如果该Service还未创建),接着调用onStart()方法。一旦Service启动后将一直运行知道调用了Context.stopService()或者stopSelf()。

绑定一个已经存在的Service

      我们可以调用startService()方法来启动一个Service方法,也可以通过bindService()方法来绑定一个Service。和调用startService()方法一样,Service会调用onCreate()来创建Service(如果还未创建),但不会调用onStart()方法而是调用onBind()返回客户端一个IBinder接口。绑定Service一般是用在远程Service调用。

       绑定Service需要三个参数:bindService(intent,conn,Service.BIND_AUTO_CREATE);第一个是Intent;第二个是ServiceConnection对象,我们创建该对象实现其onServiceConnected()和onServiceDisconnected()来判断连接成功或断开连接;第三个参数是如何创建Service,一般指定绑定时自动创建。

远程Service调用

       在Android平台中,各个组件运行在自己的进程中。它们之间不能相互访问的,但是在程序之间不可避免地要传递一些对象,在进程之间相互通信。为了实现进程之间的相互通信,Android采用了一种轻量级的实现方式RPC(Remote Procedure Call,远程进程调用)来完成进程之间通信,并且Android通过接口定义语言(Android Interface Definition Language,AIDL)来生成两个进程之间相互访问的代码。例如你在Activity里的代码需要访问Service中的一个方法,那么就可以通过这种方式来实现了。AIDL RPC机制是通过接口来实现的,类似Windows中的COM或者Corba,但它是轻量级的,客户端和被调用实现是通过代理模式实现的。代理类和被代理类实现同一个接口即前面提到的Ibinder。

原文地址:https://www.cnblogs.com/xilin/p/2613801.html