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

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

    为了简化模型,我们采用服务器客户端的模式进行开发,所有信息通过服务器进行转发。自然我们需要一个服务器,与客户端通过网络连接,存储账号信息,转发信息和客户的在线状态。本文中具体介绍客户端编写时候遇到的问题,服务器不做过多讨论。
我们知道在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。希望大家能有所收获。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值