baopengjian的专栏

经常会碰到的一个问题就是线程和服务有什么区别啊?线程与进程有什么区别啊:

1.线程与进程的区别:

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

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。

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

2.服务于线程的使用场景

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

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

2)如果任务占用CPU时间多,资源大的情况下,要使用线程。

3)最优的使用方法

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

IntentService并不适用于所有的场景,它的优点是使用方便、代码简洁,不需要我们自己像Service里面还有去创建线程;

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

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

.



最重要的是今天的心。

baopengjian的专栏

相关文章:

你感兴趣的文章:

标签云: