线程和服务的区别

1.线程与进程的区别:

进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个新的进程。同样,每次执行JDK的java.exe程序,就启动了一个独立的Java虚拟机进程,该进程的任务是解析并执行Java程序代码。

线程是指进程中的一个执行流程,有时也称为执行情景。一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式称为并发运行。许多服务器程序,如数据库服务器和Web服务器,都支持并发运行,这些服务器能同时响应来自不同客户的请求。

进程和线程的主要区别在于:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源,比如共享一个对象或者共享已经打开的一个文件。


2.工作中遇到的安卓下线程与服务的区别:

1.进程和服务的定义

线程(thread):线程是程序运行的最小单元,是分配cpu的基本单位,本应用程序托管。

服务(service);是android的一种机制,对应的service是运行在主线程上的,它是由系统进程托管。他们之间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc;

    Thread的运行时独立于Activity的,也就是说当一个Activity被finish之后,如果你没有主动停止Thread或者Thread里的run方法没有秩序完毕的话,Thread也会一直秩序。因此这了会出现一个问题:当Activity被finish之后,你不会再持有该Thread的引用。另一方面,你没有办法在不同的Activity中对同一Thread进行控制。如果你的Thread需要不停地隔一段时间就要连接服务器做同步的话,该Thread需要在Activity没有start的时候也在运行。这个时候当你start一个Activity就没有办法在该Activity里面控制之前创建的Thread。

      这是由于线程由本应用托管的结果。


    1)在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务。

    同样是在后台运行,不需要交互的情况下,如果只是完成某个任务,之后就不需要运行,而且可能是多个任务,需要长时间运行的情况下使用线程。
    2)如果任务占用CPU时间多,资源大的情况下,要使用线程。

    3)最优的使用方法

        创建并启动一个service,在Service里面创建、运行并控制该Thread(因为任何Activity都可以控制同一个Service,而系统只会创建一个对应的Service的实例)还有个办法是使用IntentService,它里面自带了子线程,使用它就不用创建新线程了。

 

但由于是单个的worker thread,所以任务需要排队,不适合大多数的多任务情况。


最后可以把Service想象成一种消息服务,而你可以在任何有Context的地方调用Context.startservice、Context.stopservice、Context.bindService,Context.unbindService,来控制它,也可以在Service里注册BroadcastReceiver,在其他地方通过发broadcast来控制它。

原文地址:https://www.cnblogs.com/dubo-/p/7707460.html