一种在Android上实现Socket通讯服务共享的方法

文档序号:6439671阅读:340来源:国知局
专利名称:一种在Android上实现Socket通讯服务共享的方法
技术领域
本发明涉及通信技术领域,尤其涉及一种应用于Android平台上的Socket通讯服务的共享管理方法。
背景技术
在Android平台上,网络通讯通常采用Socket建立。一个网络业务的发起,通常先建立Socket连接,然后获取中间的管道连接数据流,进行数据的收发。在应用过程中,可以在一个UI视图操作里发起网络业务,等待Socket连接建立后进行网络通讯,业务结束后断开网络连接并释放Socket资源。这种方法将网络通信与UI视图操作耦合在一块,不利于业务的扩展和代码的共享。若调用过程是同步阻塞,则有可能影响用户在UI视图上的操作响应,而采用创建新线程的方式进行网络数据收发,则又面临着多条连接冲突、多线程同步和浪费Socket资源等问题。综上所述,同一网络业务有可能面临着被多个UI视图调用,而套接字的建立若与各个UI视图绑定,那么其同步控制工作和资源共享方面都存在很多不确定因素。因此,需要一种能被多个UI视图共享调用的Socket通讯,实现UI视图和通讯服务的解耦,并能够统一管理的方法。

发明内容
本发明所要解决的技术问题是提供在Android上实现Socket通讯服务共享的方法,实现Socket通讯服务的共享管理和远程调用,其具体包括
创建Socket管理模块的步骤,将网络层的所有操作封装为接口,包括Socket的建立和连接、中间管道数据流的创建,以及Socket网络数据的接收和发送;
创建独立线程以运行Socket管理模块的步骤,通过Handler进行线程间的消息通信, 并且采用线程消息队列管理多个服务的请求;
将Socket管理模块封装为系统的服务组件的步骤,该服务组件提供服务的创建、销毁、绑定和解绑的接口,以管理多个调用者对Socket服务的共享使用;
将&)沙讨服务所具有的对外接口实现为Android的IBinder对象的步骤,同一进程下的本地调用者通过绑定Socket服务来获取IBinder对象本身,进而访问Socket服务的对外接口,实现Socket通讯服务共享;
采用Android接口描述语言AIDL实现IBinder对象远程代理的步骤,通过进程间的通信和解析,不同进程下的远程调用者在绑定Socket服务后获取IBinder对象代理,进而访问Socket服务的对外接口,实现Socket通讯服务共享。进一步的,所述将Socket管理模块封装为系统的服务组件的步骤中,是通过重载 Socket服务类提供的各接口来实现对Socket管理的服务封装。进一步的,所述创建独立线程以运行Socket管理模块的步骤中,采用线程消息队列管理多个服务的请求,具体是通过消息的识别字段和附带数据字段描述业务接口的类别和传入参数,对循环消息队列的处理又将消息的相关字段转化为对指定业务的调用。进一步的,将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤中,IBinder对象实现的具体业务接口根据特定规则转化为对应的消息数据,通过 Handler进行发送,并由Socket线程进行解析处理。进一步的,所述采用Android接口描述语言AIDL实现IBinder对象远程代理,来达到不同进程间Socket通讯服务共享,具体是通过AIDL接口定义文件及其代理对象,使得不同进程的客户端能够了解远程服务的接口描述,并且利用代理对象获得远程服务的调用方式。本发明采用上述方法,具有如下几种优势
1.以通讯服务为Socket通讯的代理主体,将通讯服务进行组件化,实现了业务UI视图和通讯服务的解耦,只要调用的接口定义不变,各组件内部调整都不会相互影响,维护起来也更加方便,同时提高了代码的共享;
2.以独立线程运行Socket管理模块,提高了服务的运行效率,消息队列的管理使得多个服务请求能够进行统一的调度;
3.以统一的外部调用接口描述网络通讯业务的使用,这样调用者只需关心业务逻辑而无需了解网络Socket的具体操作;
4.实现不同进程间Socket通讯服务共享,使服务的应用范围提升到系统级别,并且能够实现程序运行空间的独立,使其不会因其它程序的错误而导致异常。


图1是Socket通讯服务架构的示意图; 图2是Socket服务的调用示意图3是Socket共享服务的实现流程图; 图4是Socket共享服务的调用管理流程图。
具体实施例方式现结合附图和具体实施方式
对本发明进一步说明。如图1-图4所示,本发明具体包括以下步骤
创建Socket管理模块的步骤,将网络层的所有操作封装为接口,包括Socket的建立和连接、中间管道数据流的创建,以及Socket网络数据的接收和发送;
创建独立线程以运行Socket管理模块的步骤,通过Handler进行线程间的消息通信, 并且采用线程消息队列管理多个服务的请求;
将Socket管理模块封装为系统的服务组件的步骤,该服务组件提供服务的创建、销毁、绑定和解绑的接口,以管理多个调用者对Socket服务的共享使用;
将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤,同一进程下的本地调用者通过绑定Socket服务来获取IBinder对象本身,进而访问Socket服务的对外接口,实现Socket通讯服务共享;
采用Android接口描述语言AIDL实现IBinder对象远程代理,并进行进程间的通信和解析,不同进程下的远程调用者在绑定Socket服务后通过获取IBinder对象代理,进而访问Socket服务的对外接口,实现Socket通讯服务共享。使用上述步骤实现Socket通讯服务共享,具体实施方式

1.首先创建Socket管理类,主要负责网络的连接、绑定数据流及数据的收发工作;
2.然后创建网络业务管理类,主要提供各网络业务的相关接口,其通过封装调用 Socket管理类隐藏底层对网络数据的操作;业务管理的形式,可以根据具体业务的分类派生出多种业务处理的模块类,并由管理类负责对这些业务处理的分发调配;
3.以IBinder接口封装网络业务管理类,并通过Handler与子线程通信;拟定消息通信的协议规则和传入参数,可以应用消息类型Message的what字段区别消息的种类或业务的类别,应用obj字段传入所需要的参数对象,这样多个不同的网络业务请求便以线程消息的表现形式存放于消息队列中,而处理子线程对消息的解析又还原成具体业务并交由响应业务模块处理,最后转换为网络Socket数据进行收发;
4.创建通信服务类,继承于krvice并实现其生命周期中的几个特殊接口,包括 onCreate、onDestroy、onBind、onUnbind 等;
其中,的onCreate接口中,新建子线程和消息队列,并在子线程中初始化 IBinder接口类的对象和处理线程消息分发的Handler对象,业务管理类通过调用Socket 管理类进行网络链路的创建连接,这样服务在创建时便开始了网络链路的维护管理,为后续的业务开展做好准备;
在krvice的onDestroy接口中,对各个资源进行释放,包括结束子线程及消息队列、 关闭读写数据流、断开连接和释放Socket资源等;
在krvice的onBind接口中返回IBinder对象给请求服务的客户端,客户端根据 IBinder对象的接口定义,便能够了解可调用的具体业务操作;
在krvice的onUnBind接口中释放为客户端提供的相关资源,如业务数据的缓存、链路的维持等;
实际应用环境中,对于网络通讯短连接的需要,可以将Socket的连接操作放在onBind 中,而在客户端取消绑定后在onUnBind中进行连接的断开。通过krvice的绑定和解绑机制,可以获知当前连接服务的有效客户端的信息,从而管理服务的分配,减少对系统资源的占用;
5.对于与服务同一进程的本地调用,客户端在绑定服务成功后即能获取到服务端的 IBinder对象本身,并不需要进程间的数据解析和通讯;
6.对于跨进程的远程调用,需要在IBinder对象上进行AIDL的代理首先,创建AIDL 文件并生成相应的接口文件,通过接口文件中生成一个Mub的抽象类,里面包括AIDL定义的方法和一些辅助方法,然后在远程调用时,客户端绑定服务成功后,需要经过^ub类的 aslnterface方法获取IBinder代理对象,这样客户端便可通过AIDL的接口文件操作其代理类进行远程服务的调用。尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
权利要求
1.一种在Android上实现Socket通讯服务共享的方法,其特征在于,包括创建Socket管理模块的步骤,将网络层的所有操作封装为接口,包括Socket的建立和连接、中间管道数据流的创建,以及Socket网络数据的接收和发送;创建独立线程以运行Socket管理模块的步骤,通过Handler进行线程间的消息通信, 并且采用线程消息队列管理多个服务的请求;将Socket管理模块封装为系统的服务组件的步骤,该服务组件提供服务的创建、销毁、绑定和解绑的接口,以管理多个调用者对Socket服务的共享使用;将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤,同一进程下的本地调用者通过绑定Socket服务来获取IBinder对象本身,进而访问Socket服务的对外接口,实现Socket通讯服务共享;采用Android接口描述语言AIDL实现IBinder远程代理的步骤,通过进程间的通信和解析,不同进程下的远程调用者在绑定Socket服务后获取IBinder对象代理,进而访问 Socket服务的对外接口,实现Socket通讯服务共享。
2.根据权利要求1所述的在Android上实现Socket通讯服务共享的方法,其特征在于所述将Socket管理模块封装为系统的服务组件的步骤中,是通过重载系统服务类提供的各接口来实现对Socket管理的服务封装。
3.根据权利要求1所述的在Android上实现Socket通讯服务共享的方法,其特征在于所述创建独立线程以运行Socket管理模块的步骤中,采用线程消息队列管理多个服务的请求,具体是通过消息的识别字段和附带数据字段描述业务接口的类别和传入参数,对循环消息队列的处理又将消息的相关字段转化为对指定业务的调用。
4.根据权利要求1所述的在Android上实现Socket通讯服务共享的方法,其特征在于将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤中,IBinder 对象实现的具体业务接口根据特定规则转化为对应的消息数据,通过Handler进行发送, 并由Socket线程进行解析处理。
5.根据权利要求1所述的在Android上实现Socket通讯服务共享的方法,其特征在于所述采用Android接口描述语言AIDL实现IBinder对象远程代理,来达到不同进程间 Socket通讯服务共享,具体是通过AIDL接口定义文件及其代理对象,使得不同进程的客户端能够了解远程服务的接口描述,并且利用代理对象获得远程服务的调用方式。
全文摘要
本发明涉及通信技术领域。一种在Android上实现Socket通讯服务共享的方法,包括创建Socket管理模块的步骤,将网络层的所有操作封装为接口,包括Socket的建立和连接、中间管道数据流的创建,以及Socket网络数据的接收和发送;创建独立线程以运行Socket管理模块的步骤,通过Handler进行线程间的消息通信,并且采用线程消息队列管理多个服务的请求;将Socket管理模块封装为系统的服务组件的步骤,该服务组件提供服务的创建、销毁、绑定和解绑的接口;将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤;采用Android接口描述语言AIDL实现IBinder对象远程代理的步骤,并进行进程间的通信和解析。本发明应用于Android平台上的Socket通讯服务的共享管理。
文档编号G06F9/44GK102520936SQ20111038905
公开日2012年6月27日 申请日期2011年11月30日 优先权日2011年11月30日
发明者吕瑞明, 林剑棍, 王文欣, 许宁, 郑振贵 申请人:厦门雅迅网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1