文档章节

关于android实现聊天: Service +BroadcastReceiver

 天下杰论
发布于 2013/01/06 15:35
字数 806
阅读 1130
收藏 14
平 常经常有一些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关闭了你又将如何监听网络的数据,如果关机了,你想开机自动监听又将如何监听。所以服务里面搭配 一个应用唯一的广播,是即时通讯功能里面常用的手法。

本文转载自:http://blog.csdn.net/cj6585256/article/details/7337881

粉丝 54
博文 450
码字总数 24615
作品 0
沈阳
项目经理
私信 提问
加载中

评论(1)

y
yuyongjun
Activity与Service 本质是一样的。
android基础知识05:四大组件之Broadcast Receiver

本文介绍Broadcast Receiver,包括几部分内容:Broadcast Receiver概述及实例、自定义Broadcast Receiver、Broadcast Receiver的实现细节、生命周期等。 csdn貌似今天出问题了,无法上传图片...

迷途d书童
2012/03/23
22.6K
8
Android Service 服务(二)—— BroadcastReceiver

一、 BroadcastReceiver简介 BroadcastReceiver,用于异步接收广播Intent,广播Intent是通过调用Context.sendBroadcast()发送、BroadcastReceiver()接收。 广播Intent的发送是通过调用Conte...

长平狐
2013/01/06
180
0
Android多线程:IntentService使用教程(含实例讲解)

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将手把手教你使用(含实例介绍)。 目录 /** 在构造函数中传入线程名字 /** 复写onHandleIntent()方法 根据 Inte...

Carson_Ho
05/20
0
0
BroadcastReceiver—简介

Android BroadcastReceiver 简介 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Br......

zt1212
2012/10/12
220
0
Android中让Service被关闭后再重新启动

--------------------------------------------------------------------------- 转载:http://blog.csdn.net/arui319 ------------------------------------------------------------------......

simpower
2014/08/31
69
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
5
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部