Android中Service与Thread的区别

一直觉得android servicethread的功能差不多。

service android的一种控件,有可能运行在同一个线程上,也有可能运行在其他线程上。

servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于clientserver,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc。而thread是由本应用程序托管。
1). Thread
Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。
2). Service
Service android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreateonStart 这些函数在被系统调用的时候都是在主进程的 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.startServiceContext.stopServiceContext.bindServiceContext.unbindService,来控制它,你也可以在 Service 里注册BroadcastReceiver,在其他地方通过发送 broadcast 来控制它,当然这些都是 Thread 做不到的。

1.Service android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如果是RemoteService,那么对应的 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 做不到的。

更多相关文章

  1. [Android] android的消息队列模型
  2. Android(安卓)模拟系统事件(三)
  3. Android当中的线程使用
  4. Android开发实践:使用Service还是Thread
  5. Android---44---使用AIDL Service 实现跨进程调用Service
  6. 手机Android系统有那些优势?
  7. Android(安卓)7.0 ActivityManagerService(5) 广播(Broadcast)相
  8. Android通信方式篇(四)-Binder机制(开篇)
  9. android生命周期(详细总结)

随机推荐

  1. android 开源项目汇总
  2. Android获取系统时间
  3. android 学习资料
  4. android播放音乐
  5. android实现xml数据的解析
  6. Android CalendarView 使用
  7. Android DOM解析XML
  8. Android自定义弹窗进度条
  9. ch029 Android service aidl
  10. Accessing internal data on Android dev