文档章节

Service 与 Thread 的区别

带梦想一7飞
 带梦想一7飞
发布于 2014/02/11 10:11
字数 566
阅读 91
收藏 9

很多时候,你可能会问,为什么要用 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://www.cnblogs.com/tt_mc/archive/2012/08/10/2632275.html

带梦想一7飞
粉丝 19
博文 190
码字总数 99203
作品 0
朝阳
私信 提问
四大组件---Service

Service 学习路线 1. 基础知识 定义:服务,属于Android中的计算型组件 作用:提供需要在后台长期运行的服务(如复杂计算、下载等等) 特点:长生命周期的、没有用户界面、在后台运行 2. 生命...

android-key
2016/11/21
15
0
Android中Service与Thread的区别

很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。 1). Thread:Thread 是程序执行的最小单元,...

40岁的青春
2015/05/28
0
0
IntentService-你可能需要知道这些

Service作为Android四大组件之一,在我们的日常开发中占着不可或缺的一席,而轻量级的IntentService作为对Service的一个补充,也越来越收到大家的推崇,本博文就带大家来学习和分析下IntentS...

24K男
2017/09/27
0
0
[Android] Android中Thread和Service的区别

很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。 1). Thread:Thread 是程序执行的最小单元,...

枫兮兮
2014/03/09
0
0
Android 中的 Service 全面总结(转载)

转载地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 感谢作者 Android 中的 Service 全面总结 1、Service的种类 按运行地点分类: 类别 区别 优点 缺点 应用 本地服务...

xalion
2015/09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记录"正则表达式"

详细请查看我的博客:https://blog.enjoytoshare.club/article/RegularExpression.html 1 写在前面 正则表达式(Regular Expression)在代码中常常简写为regex。正则表达式通常被用来检索、替...

wugenqiang
17分钟前
0
0
linux clamav 免费查毒工具

linux下需要杀毒工具吗?我一直认为是不要的,基于linux的病毒很少,linux 安全防护也做的很好,一般很难功破。我想那些黑客们更喜欢,写windows下的病毒,用的人多啊,传播也容易。下面的操...

老孟的Linux私房菜
20分钟前
1
0
关于连接PostgreSQL时提示 FATAL: password authentication failed for user "连接用户名" 的解决办法

关于连接PostgreSQL时提示 FATAL: password authentication failed for user "连接用户名" 的解决方法 今天帮一个同学解决了一个FATAL: password authentication failed for user "连接用户名......

dragon_tech
24分钟前
0
0
聊聊jest的IdleConnectionReaper

序 本文主要研究一下jest的IdleConnectionReaper IdleConnectionReaper jest-common-6.3.1-sources.jar!/io/searchbox/client/config/idle/IdleConnectionReaper.java public class IdleCon......

go4it
30分钟前
0
0
android 事件分发

记录下对Android事件分发的理解: 如果a作为viewgroup,b作为view,b包含在a中。事件会先传递到viewgroup中,既a。然后a会进行事件分发给子view。事件分发的方法中,会有个判断,是否要分发给...

醉雨
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部