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。希望大家能有所收获。

相关文章推荐

即时通讯软件开发界公认的说法

目前即时通讯软件开发界公认的说法是目录级别在3级以内。飞鸽传书有时域名根目录下不一定只有目录,还有一些单页面,这样的单页面在局域网聊天中的权重肯定要比目录下的单页面高。 同时,在目录中设置内网通信是很...

android平台即时通讯

  • 2014-03-03 11:37
  • 2.43MB
  • 下载

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

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

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

原文地址:http://blog.csdn.net/i_like_cpp/article/details/6822430 写文章不容易呀,各位哥哥转载请注明出处呀,要说明来自我的CSDN博客,谢谢。...

即时通讯开发平台的使用经验

压缩包可以从这里获得:http://anychat.storage.aliyun.com/AnyChatCoreSDK_Win32(MBCS)_V4.5.zip   下载后,首先将其解压到一个临时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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