service和thread的区别,何时用service,何时用thread?

出自:http://www.maiziedu.com/group/article/9550/

Service android的一种机制,是四大组件之一。

按服务性质分local service和remote service

当它运行的时候如果是Local Service,那么对应的 Service是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的,如果此时你在Service里编写了非常耗时的代码,程序必定会出现ANR的!

当它运行的时候如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。

按启动方式分bindService和startedService 

其中bindService更类似于客户端和服务端,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息。


那么Service和Thread到底什么联系,为什么很多人都容易混淆二者?

之所以有不少人会把它们联系起来,主要就是因为Service的后台概念。Thread我们大家都知道,是用于开启一个子线程,在这里去执行一些耗时操作就不会阻塞主线程的运行。而Service我们最初理解的时候,总会觉得它是用来处理一些后台任务的,一些比较耗时的操作也可以放在这里运行,这就会让人产生混淆了。

其实Service和Thread根本就不是一个级别的东西,Service是系统的四大组件之一,Thread只是一个用来执行后台任务的工具类,由当前程序托管,而service托管于系统的servicemanager。这样做的目的是因为Thread独立于activity,一旦activity结束,该线程也不一定会执行完成,而此时你不再持有该thread的引用,你无法在控制他了。而且我们有的时候也需要多个不同的activity控制一个服务。这些thread都不能实现,所以我们引进service。 



总结:

       Service是系统的四大组件之一,Thread只是一个用来执行后台任务的工具类

  1. Service可以设置独立的进程;Thread不可以,只能存在于进程中。

  2. Service有自己的生命周期。如果是以bind的方式启动,生命周期跟activity相同。如果是以start方式启动,不调用stop会一直运行在后台;Thread运行完了就结束了,启动后跟activity没有关系了,哪怕activity结束了,thread也会在后台运行。

  3. 不同的Activity可以调用同一个Service;不同的Activity不能调用同一个Thread。

  4. Service如果是运行在后台的,可以注册接收系统或自定义广播;Thread不能接收广播

  5. 不同的应用程序可以共享同一Service,但不能共享同一Thread。

  6. service中可以创建thread,避免ANR。

  7. Thread在后台运行(Activty stop)的优先级低于后台运行的Service,如果执行系统资源紧张,会优先杀死前一种,后台运行的Service一般情况下不会被杀死,如果被杀死,系统空闲时会重新启动service.


什么时候用Service,什么时候用多线程?

从逻辑上你认为需要一个后台操作,但跟我们现在主线程操作通讯频繁,逻辑关系紧密,就用多线程(直接用)

比如你要下载图片,然后在当前activity上显示,那就用多线程

能够从逻辑上区分开来,又或者耗时较长,就用后台服务

比如下载电影就用service,这样即使来电话了,也不影响下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值