博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 学习开发笔记《Service 与 Thread 的区别 》
阅读量:6764 次
发布时间:2019-06-26

本文共 1178 字,大约阅读时间需要 3 分钟。

很多时候,你可能会问,为什么要用 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 做不到的

转载于:https://www.cnblogs.com/Dylanblogs/p/4209454.html

你可能感兴趣的文章
【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)...
查看>>
【转】cocos2dx 3.x 集成protobuf
查看>>
NOI2017游记
查看>>
zabbix监控到异常后自动执行对应命令
查看>>
struts的体系结构
查看>>
不同数据库的分页方法
查看>>
常见设计模式---单例设计模式
查看>>
好的软件说明
查看>>
ORACLE DBLINK 使用
查看>>
被遗忘的宝藏-LaTeX发行版自带字体&自己一些字体心得
查看>>
常微分方程
查看>>
ArcSDE空间数据库中SDE用户使用探讨 (转载)
查看>>
cmd net use
查看>>
docker 7 docker的帮助命令
查看>>
set .net principle
查看>>
Map统计数组的相同字符的总数
查看>>
Android学习小记-----拦截电话/拒接电话,规避拒接电话前响一声或者两声的问题...
查看>>
iphone 如何发布应用程序
查看>>
ABAP JSON转换
查看>>
mac 下获取 os x 的系统版本,使用 oc cocoa
查看>>