【转】Service使用技巧

 

转自 http://blog.csdn.net/kechanghe0705/article/details/7055799

平常经常有一些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关闭了你又将如何监听网络的数据,如果关机了,你想开机自动监听又将如何监听。所以服务里面搭配一个应用唯一的广播,是即时通讯功能里面常用的手法。

posted @ 2012-04-19 17:23  JarrahWu  阅读(215)  评论(0编辑  收藏  举报