Android平台即时通讯软件开发小经验

转载 2015年11月17日 22:19:22

分享一下自己所设计的软件框架和开发过程中一些小问题的解决方法。

    为了简化模型,我们采用服务器客户端的模式进行开发,所有信息通过服务器进行转发。自然我们需要一个服务器,与客户端通过网络连接,存储账号信息,转发信息和客户的在线状态。本文中具体介绍客户端编写时候遇到的问题,服务器不做过多讨论。
我们知道在Android系统中有Activity和Service这样的运行实体,Activity主要为用户进行信息的展示,而Service一般是后台服务长期运行。根据客户需要和对现有即时通讯软件的分析,我们做了4个Activity用来展示和采集用户所需要的信息,分别用户登录Logon、用户注册register、在线列表Main和聊天界面Talk;然后在后台有一个服务Service来和服务器进行通讯,并和Activity进行信息交互来完成所需信息的展示。
     这样的话,我们便存在一个后台服务Service随时在监听服务器那边传来的信息并维护自身的在线状态,即便用户在使用别的应用,收到的信息也可以通过notification在手机的状态栏中及时进行显示,客户端与服务器之间进行通讯的所有复杂协议全部都封装到Service内部,外部透明也便于修改。用户在使用即时通讯这个应用时候,每次打开的Activity均与Service之间进行连接,获取现在的状态与所需的信息进行处理。
         因此我们必须处理Activity与Service之间的信息传递。
    在这里,为了方便对进程间信息的处理,我们使用Message来对通信的内容进行封装,使用Messenger来对Message进行消息的处理,因此我们在每一个Service和Activity中都需要创建自己所需要的Messenger对象。可以在Handler的继承匿名类中添加多特定消息的处理程序,然后使用Messenger messenger=new Messenger(new Handler的匿名类())这样的方法来获得所需要的Messenger。
   我们使用Main作为这个应用需要展开的第一个Activity,在恰当的时候可以使用StartService()和bindService()方法分别开启服务并和服务进行信道链接。在链接建立之后便可以通过Message进行通信,根据是否已经登录的信息来判断是否要转到Logon的Activity。
      在Service中,有一个方法必须被重写,那便是用来和Activity进行链接的一个重要方法public IBinder onBind(Intent intent),如果Service不需要和任何Activity做链接的话,返回null便可,如果要和其他的Activity做链接的话,则需要返回一个IBinder对象,可以通过已经实例化的Messenger对象的getBinder()方法获得。
      在Activity中使用bindService()方法后,Activity便会在恰当的时候主动和Service建立链接并通过调用onBind()将IBinder对象返回给试图建立链接的Activity。在Activity中需要建立一个ServiceConnection的对象来对返回的信息进行处理,此对象必须重写此类中的public void onServiceConnected(ComponentName className,IBinder ibinder)和public void onServiceDisconnected(ComponentName className)方法来完成对链接建立和链接撤销时候的处理,在链接建立时候,通过Messenger sendout=new Messenger(ibinder)便可以得到一个Service中Messenger的一个引用。使用sendout.send(message)这样的语句便可以向Service中的Messenger发送已经实例化好的message消息。讲本Activity中的Messenger的引用赋值给message.replyTo,也可以在message中包含可回信的Messenger引用,同样可以使用此引用的send来回复信息。
      这样我们便可以在Activity和Service中建立一个信道来进行通信,Message类中可以放大量的数据,具体的使用可以参考其他有关的书籍。

     在此,我们介绍了一个简化的即时通讯软件的构架模型,并讨论了Activity和Service之间使用Message和Messenger建立通信信道并进行进程间通信的过程,希望能够帮助大家理解,具体的使用可以参考android的开发手册http://developer.android.com/reference/android/app/Service.html#RemoteMessengerServiceSample。希望大家能有所收获。

Android平台即时通讯软件开发小经验

转载:http://blog.sina.com.cn/s/blog_70083ca10100u2yt.html 前一段时间为了锻炼自己的能力和熟悉Android平台的开发,自己写了一个简单的...
  • jnjlc1
  • jnjlc1
  • 2015年08月18日 17:34
  • 367

即时通讯软件开发 需要用到什么技术

写文章不容易呀,各位哥哥转载请注明出处呀,要说明来自我的CSDN博客,谢谢。即时通讯软件开发,建议,把机械工业出版社出的《Windows网络编程技术》看N遍后,再利用MFC或者SDK编写一些小的通信例...
  • i_like_cpp
  • i_like_cpp
  • 2011年09月26日 15:26
  • 5048

Android基于环信开发的即时通讯APP

Android基于环信开发的即时通讯APP,源代码在Github上,GitHub地址为:https://github.com/PowerDos/BLChat...
  • A5435431941
  • A5435431941
  • 2017年06月27日 11:32
  • 687

第一次小有成就心得

今天是来公司第8天,一直在干技术支持的事情,处理着客户订单中遇到的各种问题,貌似每个问题的解决方法都与自己所学专业知识没有太大的关系,唯一用到计算机相关知识的是每天刷新“工单环节不一致”,但脚本语言也...
  • u012491514
  • u012491514
  • 2015年06月17日 11:50
  • 378

即时通讯软件几个主要下载分类

昨日晚间国内著名局域网聊天网站即时通讯软件,突然进行内容方面的大规模调整,其中聊天软件频道已经关闭,影视内容跳转向在线观看的飞鸽大全页面。据悉,即时通讯软件几个主要下载分类都会关闭,但尚不涉及关站。即...
  • mynote
  • mynote
  • 2011年01月24日 22:54
  • 582

android即时通讯研究(逐渐完善中,还很简单)

在android实现了移动通话的项目,使用tcp传送数据。主要是为了学习android基础知识,所以做的比较简单,语音通话的降噪和回音消除都没有做, 有兴趣的朋友可以继续做下去,建议用rtp实现语音传...
  • caizhegnhao
  • caizhegnhao
  • 2014年07月22日 23:57
  • 13038

环信即时通讯在Android平台的部署

官网环信下载SDK创建一个工程如果想要封装性好一点,也可以在工程里再创建一个环信的Library,然后将SDK里的jar和.so,都导入到工程清单文件下面是唤醒Library库里面的清单文件,包含了权...
  • q4878802
  • q4878802
  • 2016年08月22日 18:59
  • 941

Android即时通讯和sns开源项目汇总

本博客转载自: Android即时通讯和sns开源项目汇总 一 国内即时通讯和社交系统平台 排名不分先后! 1 LeanCloud 2 环信 3 网易云信 4 阿里百川...
  • qq_27397109
  • qq_27397109
  • 2016年10月05日 21:57
  • 1579

Java---基于TCP协议的相互即时通讯小程序

这是几年前,新浪的一个面试题~要求是3天之内实现~ 通过TCP 协议,建立一个服务器端。通过配置服务器端的IP和端口: 客户端之间就可以相互通讯~上线了全部在线用户会收到你上线的通知。 下线了全...
  • qq_26525215
  • qq_26525215
  • 2016年05月16日 20:00
  • 12992

Web 即时通讯

 如今绝大多数IM软件都是基于桌面的,通常使用Tcp/Udp,并且都实现了防火墙穿透(代理)和基于Udp的NAT穿透的P2P技术。创建一个基于Web的IM是否可行(我们这里不考虑在浏览器中嵌入类似Ac...
  • songfuqiang
  • songfuqiang
  • 2008年04月01日 17:55
  • 5976
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android平台即时通讯软件开发小经验
举报原因:
原因补充:

(最多只允许输入30个字)