Android四大组件简单理解——服务(Service)

一、服务(Service)

        Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序,用于在后台完成用户指定的操作(如:复杂的计算,音乐播放,下载等)。可以理解为是没有前台的Activity,适合用来运行不需要前台界面的代码,服务可以被手动关闭不会重启,但是如果被自动关闭,内存充足就会重启。

        特点:无用户界面、在后台运行、生命周期长。

二、服务的分类:

    1、按照使用范围分类:本地服务和远程服务。

    (1)、本地服务:Local  Service

           优点:本地服务在一定程度上节约了资源,另外本地服务因为在同一个进程,因此不需要IPC,也不需要AIDL。相应BindService会方便很多。

           缺点:主进程被Kill后,服务便会终止。

           区别:本地服务依附在主进程上,而不是独立的进程,用于应用程序内部。

           应用:音乐播放服务。

  (2)、远程服务:Remote Service

          优点:对应进程名格式为所在包名加上指定的android:process字符串。由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务,具有较高的灵活性。

         缺点:会占用一定的资源,并且使用AILD进行IPC稍微麻烦一点。

         区别:远程服务是独立的进程,用于android系统内部的应用程序之间,可被其他应用程序复用。

         应用:提供天气状况、时间日历的系统服务,这种Service是常驻的。

2、按运行类型分类:前台服务和后台服务

   (1)、前台服务:

          区别:会在通知栏显示正在运行的Notification

          应用:当服务被终止的时候,通知一栏的Notification也会消失,对用户有一定的通知作用,如音乐播放服务。

       服务是在调用 startForeground(android 2.0 及其以后版本)使服务成为前台服务。这样做的好处在于,当服务被外部强制终止掉的时候,ONGOING 的 Notification 会被移除掉。

    (2)、后台服务:

           区别:默认的后台服务,没有Notification。

           应用:某些不需要提示的服务运行或终止时,用户看不到效果,如天气更新,日期同步,邮件同步等。

3、按照使用方法分类:启动型和绑定型

        (1)、startService(启动型服务):当应用程序组件(如Activity)调用startService()方法启动时,服务处于started状态。

       区别:是由其他组件(如Activity)调用startService()启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关。并且可以在后台无限期运行,即使启动服务的组件已经被销毁,因此服务需要在完成任务后调用stopService(),或者由其他组件调用stopService()方法停止。

         (2)、bindService(绑定型服务器):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

       区别:使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止了,大有“不求同时生,必须同时死”的特点

4、注册:和Activity一样,应用中的每个service在使用前都需要在清单文件中进行注册,否则应用不识别。

5、Service与Thread的区别。

     Service与Thread无任何关系。之所以有不少人把他们联系起来,主要是因为Service的后台概念。

    后台:后台任务运行完全不依赖UI,即使Activity被销毁/程序被关闭,只要进程还在,后台任务就可以继续运行。

二者的异同。

      Service:

          作用:执行异步操作。

          运行线程:主线程(不能处理耗时操作,否则会出现ANR)

          运行范围:完全不依赖UI/Activity,只要进程还在,Service就可以继续运行

                           所有Activity都可与Service关联,获得Binder实例&操作其中的方法。

                           若需处理耗时操作,则在Service里创建Therad子线程执行。

    Thread:

          作用:执行异步操作

          运行线程:工作线程。

          运行范围:即依赖于某个Activity

                            在一个Activity中创建的子线程,另一个Activity无法对其进行操作。

                           在Activity很难控制Thread

                           当Activity被销毁后,就无法在获取到之前创建的子线程实例。

你可能感兴趣的:(Android四大组件简单理解——服务(Service))