很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。

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

2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。因此请不要把 Service 理解成线程,它跟线程半毛钱的关系都没有!

既然这样,那么我们为什么要用 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 做不到的。

参考链接:http://blog.csdn.net/hopezhangbo/article/details/7343741

最新文章

  1. smarty使用
  2. InnoDB还是MyISAM 再谈MySQL存储引擎的选择
  3. C# 模拟登陆并继续访问其他页面
  4. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)
  5. An Introduction to Interactive Programming in Python (Part 1) -- Week 2_1 练习
  6. 深入理解GCD(一)
  7. Mybatis 实现传入参数是表名
  8. 同一客户代码下一个CPN对应多个FG会出现CPN描述一样的问题
  9. 用Lighttpd做图片服务器
  10. g++实用技巧
  11. POj-3104 Drying 二分+贪心
  12. linq中给字段添加别名
  13. 201521123115《java程序设计》第9周学习总结
  14. Java map 详解 - 用法、遍历、排序、常用API等
  15. java加密算法AES与RSA
  16. java并发编程实践——王宝令(极客时间)学习笔记
  17. Java程序入口:main()方法讲解
  18. 图形设计必备软件:CorelDRAW
  19. 走起 ~私有gitlab
  20. Spring Boot 配置详解

热门文章

  1. 【洛谷P3224】永无乡 并查集+Splay启发式合并
  2. python之配置日志的几种方式
  3. BCD码(如何转换,转换方式的证明)
  4. My thoughts after NOIP 2018(1)
  5. call_user_func 和 call_user_func_array用法
  6. switch查询成绩、公司年销售额求和、根据工龄求工资
  7. BeautifulSoup 获取无标签文本
  8. go 基础(二)
  9. css postion 属性区别【原】
  10. jquery :checked(过滤选择器) 和 空格:checked(后代选择器)【转】