您的位置:首页 > 移动开发 > Android开发

Android中Service与Thread的区别

2013-11-19 19:24 375 查看
Android中Service与Thread的区别
一直觉得android service和thread的功能差不多。
service 是android的一种控件,有可能运行在同一个线程上,也有可能运行在其他线程上。
servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc。而thread是由本应用程序托管。

1). Thread:Thread
是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread
来执行一些异步的操作。

2). Service:Service
是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service
是运行在主进程的 main
线程上的。如:onCreate,onStart
这些函数在被系统调用的时候都是在主进程的 main
线程上运行的。如果是Remote Service,那么对应的 Service
则是运行在独立进程的 main
线程上。
既然这样,那么我们为什么要用 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
的实例)。  
因此你可以把 Service
想象成一种消息服务,而你可以在任何有 Context
的地方调用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也可以在
Service 里注册BroadcastReceiver,在其他地方通过发送 broadcast
来控制它,当然这些都是 Thread
做不到的。
1.Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的
Service 是运行在主进程的 main
线程上的。如果是Remote Service,那么对应的 Service
则是运行在独立进程的 main
线程上,service和调用者之间的通讯都是同步的(不论是远程service还是本地service),它跟线程一点关系都没有!
2.Thread 的运行是独立于 Activity
的,也就是说当一个 Activity
被 finish
之后,如果你没有主动停止 Thread 或者 Thread
里的 run
方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当 Activity
被 finish
之后,你不再持有该 Thread
的引用,也就是你下次启动的时候,无法控制之前创建的线程,而service则可以。另一方面,你没有办法在不同的 Activity
中对同一 Thread
进行控制。
3.你也可以在 Service
里注册BroadcastReceiver,在其他地方通过发送 broadcast
来控制它,这些是 Thread
做不到的。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: