欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/6/15 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 service和thread的区别,何时用service,何时用thread? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

按服务性质分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只是一个用来执行后台任务的工具类

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

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

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

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

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

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

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


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

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

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

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

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


    总结

    以上是生活随笔为你收集整理的service和thread的区别,何时用service,何时用thread?的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。