Android四大组件之:Service

    Service是和Activity最相似的一个组件,只不过Activity运行在前台,有用户界面,和用户之间有交互,而Service运行在后台,无法和用户之间进行交互;Service也有自己的生命周期,并且和Activity一样都需要在android的清单文件中配置。

    可以通过两种方式来启动Service,分别如下:

1:startService()

   (1): 通过该方式启动的Service和启动者之间没有关系,被启动的Service就像“脱缰的野马”,即使启动者退出了,被启动的Service还会继续运行。

  (2):启动者启动Service时startService(intent),可以通过Intent给Service传递数据,但是除此之外,启动者和Service之间无法再进行通信。

  (3):通过该方式启动的Service可以自杀stopSelf(),也可以被启动者杀死stopService(intent)。

2:bindService()

 (1):通过该方式启动的Service和启动者绑定到一起了,如果启动者退出,则被启动的Service也会终止。

 (2):启动者不仅在启动Service时bindService(intent,ServiceConnection,flags),可以通过Intent给Service传递数据,而且还可以通过ServiceConnection对象的onServiceConnected方法的参数进行通信。就相当于在启动者中,可以拿到Service的引用或Service中某对象的引用,这样以来就可以在启动者中去访问Service中的方法。

 (3):启动者退出,被启动的Service终止;Service可以自杀stopSelf(),也可以被启动者解除绑定unbindService(connection)后而终止。

    Service和Activity一样都不能直接处理耗时操作,否则会引发ANR异常;只能通过启动子线程的方式,来让子线程去完成耗时操作。

    如果我们启动一个Service,并让这个Service启动子线程,目的仅仅是为了完成一个耗时操作,那么没必要继承普通Service,并手动创建一个子线程 ;直接继承IntentService,重写OnHandleIntent()方法即可。

   IntentService在接收到Intent请求时,会将其加入队列中,并自动创建一个子线程来依次处理Intent请求,执行onHandleIntent方法中的操作,开发者无须再处理多线程问题;当所有Intent请求处理完毕后,IntentService会自动终止。

  我个人觉得IntentService就是为了处理耗时操作的。

原文地址:https://www.cnblogs.com/hzcya1995/p/13302500.html