平常经常有一些Android爱好者问我Android服务有什么用,跟线程不是差不多吗,还有Service是继承Context 是不是跟Activity有相同的特性。还有经常在CSDN上也遇上好多朋友问到这样的问题,看到他们的问题后,我思考了好久,总结出一个问题是他们把Service与Activity和Thread之间的区别与联系弄混了,其实他们之间是有异同的。接下来我从不同的角度来分析一下他们之间的异同:
1. 1.Thread在run执行完后线程自动消失,而Service用户不调用stopService()服务就不会停止。
2. Activity与Service 都继承至Context,他们具有Context共同的特性,比如启动服务、注册广播等。
3. 可以同时创建多个Thread和Activity,而Service只能创建一个进程空间。
4. Service可以开机自动启动,而其它任何进程不能实现开机自动启动。
5. Thread可以处理耗时操作,而Activity与Service不能实现耗时操作。

以上是他们所存在的异同,从以上异同我为大家总结一下Service所使用的场景:
1. .打电话、接电话功能:一个电话只有一个电话管理的服务,它不可能有两个服务来管理这个电话的接听与拔出,这样的情况下可 以使用服务,并且该服务需要在手机开机后会立即启动,这样的功能只有服务才能做到。假如我们不使用服务而使用Thread,可以想象打进来的一个电话会被多少Thread所监听到。
2. 即时聊天功能的接收使用的广播:从此面一个原因可以看出,服务只能存在一个,所以我们也可以推算出,如果在一个服务的onCreate里面创建一个对象,那这个对象永远也是唯一的。一般我们启动一个服务都会随之注册一个广播,此广播因为在服务里面注册,所以此广播也是系统唯一的。所以此广播一般都是随着服务的开启就被注册,服务的停止就被注销。所以像即时聊天功能的应用,一般是在启动一个服务,此服务就注册一个广播,此广播接收从Socket接收到的数据,将数据在广播里面处理完后就发送给UI层。假如我们使用Thread来接收Socket的数据,如果Thread启动了多个,那Socket接收的数据可能 就被多个Thread所接收,所以发送给界面的入口就多了。有人会问为什么把广播放在Service里面注册,我想,如果广播不在Service里面注册那只有在Activity里面注册,如果Activity关闭了你又将如何监听网络的数据,如果关机了,你想开机自动监听又将如何监听。所以服务里面搭配一个应用唯一的广播,是即时通讯功能里面常用的手法。
3.

QQ群:166711323


微信扫一扫


更多相关文章

  1. android移动平台——移动SNS(二):注册登录
  2. Android(安卓)App支付系列(二):支付宝SDK接入详细指南(附官方支付de
  3. Android之四大组件(Service的开启与关闭)
  4. Android相关属性的介绍:android:exported
  5. 【Android】Android的与服务器端传送信息使用JSON类-JSONObject
  6. Android基础知识巩固系列 Android之四大组件——Service(服务)
  7. 图解 Android(安卓)广播机制
  8. android推送服务overview
  9. Android客户端与服务器端的json数据交互(很详细)

随机推荐

  1. android中获取手机相机和相册可以传多张
  2. 什么是Android(安卓)系统。
  3. Android(安卓)Context 到底是什么?
  4. Android之第三方库“scnu-jwc-sdk-1.0.0
  5. Android安卓开发集成微信第三方扫描二维
  6. 利用Android多进程机制来分割组件
  7. Android 设备上实现串口的移植
  8. android代码混淆个人总结及踩坑
  9. Java: Swing中引入Android的NinePatch技
  10. Android NDK开发篇(六):Java与原生代码通