关于android实现聊天: Service +BroadcastReceiver

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

转载于:https://my.oschina.net/zhangjie830621/blog/100343

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值