不少时候,你可能会问,为何要用 Service,而不用 Thread 呢,由于用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。android
1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。能够用 Thread 来执行一些异步的操做。服务器
2). Service:Service 是android的一种机制,当它运行的时候若是是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。若是是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。所以请不要把 Service 理解成线程,它跟线程半毛钱的关系都没有!异步
既然这样,那么咱们为何要用 Service 呢?其实这跟 android 的系统机制有关,咱们先拿 Thread 来讲。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 以后,若是你没有主动中止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。所以这里会出现一个问题:当 Activity 被 finish 以后,你再也不持有该 Thread 的引用。另外一方面,你没有办法在不一样的 Activity 中对同一 Thread 进行控制。函数
举个例子:若是你的 Thread 须要不停地隔一段时间就要链接服务器作某种同步的话,该 Thread 须要在 Activity 没有start的时候也在运行。这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制以前建立的 Thread。所以你便须要建立并启动一个 Service ,在 Service 里面建立、运行并控制该 Thread,这样便解决了该问题(由于任何 Activity 均可以控制同一 Service,而系统也只会建立一个对应 Service 的实例)。spa
所以你能够把 Service 想象成一种消息服务,而你能够在任何有 Context 的地方调用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也能够在 Service 里注册 BroadcastReceiver,在其余地方经过发送 broadcast 来控制它,固然这些都是 Thread 作不到的。线程
根据进程优先级,Thread在后台运行(Activty stop)的优先级低于后台运行的Service,若是执行系统资源紧张,会优先杀死前一种,后台运行的Service通常状况下不会被杀死,若是被杀死,系统空闲时会从新启动service.进程