CN102520936B - 一种在Android上实现Socket通讯服务共享的方法 - Google Patents
一种在Android上实现Socket通讯服务共享的方法 Download PDFInfo
- Publication number
- CN102520936B CN102520936B CN201110389055.2A CN201110389055A CN102520936B CN 102520936 B CN102520936 B CN 102520936B CN 201110389055 A CN201110389055 A CN 201110389055A CN 102520936 B CN102520936 B CN 102520936B
- Authority
- CN
- China
- Prior art keywords
- socket
- service
- android
- interface
- shared
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004891 communication Methods 0.000 title claims abstract description 43
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000008569 process Effects 0.000 claims description 21
- 238000005538 encapsulation Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 claims description 4
- 230000005540 biological transmission Effects 0.000 claims description 3
- 238000002224 dissection Methods 0.000 claims description 2
- 230000006378 damage Effects 0.000 claims 1
- 238000007726 management method Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000010079 rubber tapping Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明涉及通信技术领域。一种在Android上实现Socket通讯服务共享的方法,包括:创建Socket管理模块的步骤,将网络层的所有操作封装为接口,包括Socket的建立和连接、中间管道数据流的创建,以及Socket网络数据的接收和发送;创建独立线程以运行Socket管理模块的步骤,通过Handler进行线程间的消息通信,并且采用线程消息队列管理多个服务的请求;将Socket管理模块封装为系统的服务组件的步骤,该服务组件提供服务的创建、销毁、绑定和解绑的接口;将Socket服务所具有的对外接口实现为Android的IBinder对象的步骤;采用Android接口描述语言AIDL实现IBinder对象远程代理的步骤,并进行进程间的通信和解析。本发明应用于Android平台上的Socket通讯服务的共享管理。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种应用于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服务的共享使用;
将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. 创建通信服务类,继承于Service并实现其生命周期中的几个特殊接口,包括:onCreate、onDestroy、onBind、onUnbind等;
其中,在Service的onCreate接口中,新建子线程和消息队列,并在子线程中初始化IBinder接口类的对象和处理线程消息分发的Handler对象,业务管理类通过调用Socket管理类进行网络链路的创建连接,这样服务在创建时便开始了网络链路的维护管理,为后续的业务开展做好准备;
在Service的onDestroy接口中,对各个资源进行释放,包括结束子线程及消息队列、关闭读写数据流、断开连接和释放Socket资源等;
在Service的onBind接口中返回IBinder对象给请求服务的客户端,客户端根据IBinder对象的接口定义,便能够了解可调用的具体业务操作;
在Service的onUnBind接口中释放为客户端提供的相关资源,如业务数据的缓存、链路的维持等;
实际应用环境中,对于网络通讯短连接的需要,可以将Socket的连接操作放在onBind中,而在客户端取消绑定后在onUnBind中进行连接的断开。通过Service的绑定和解绑机制,可以获知当前连接服务的有效客户端的信息,从而管理服务的分配,减少对系统资源的占用;
5. 对于与服务同一进程的本地调用,客户端在绑定服务成功后即能获取到服务端的IBinder对象本身,并不需要进程间的数据解析和通讯;
6.对于跨进程的远程调用,需要在IBinder对象上进行AIDL的代理:首先,创建AIDL文件并生成相应的接口文件,通过接口文件中生成一个Stub的抽象类,里面包括AIDL定义的方法和一些辅助方法,然后在远程调用时,客户端绑定服务成功后,需要经过Stub类的asInterface方法获取IBinder代理对象,这样客户端便可通过AIDL的接口文件操作其代理类进行远程服务的调用。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (5)
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接口定义文件及其代理对象,使得不同进程的客户端能够了解远程服务的接口描述,并且利用代理对象获得远程服务的调用方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110389055.2A CN102520936B (zh) | 2011-11-30 | 2011-11-30 | 一种在Android上实现Socket通讯服务共享的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110389055.2A CN102520936B (zh) | 2011-11-30 | 2011-11-30 | 一种在Android上实现Socket通讯服务共享的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102520936A CN102520936A (zh) | 2012-06-27 |
CN102520936B true CN102520936B (zh) | 2017-02-08 |
Family
ID=46291878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110389055.2A Active CN102520936B (zh) | 2011-11-30 | 2011-11-30 | 一种在Android上实现Socket通讯服务共享的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102520936B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488478A (zh) * | 2013-09-03 | 2014-01-01 | 厦门雅迅网络股份有限公司 | 基于android平台的设备管理框架 |
CN103902390B (zh) * | 2014-03-12 | 2017-04-19 | 深圳创维-Rgb电子有限公司 | 基于Android的应用层的进程间通信方法及基础应用通信系统 |
CN105204951A (zh) * | 2015-10-10 | 2015-12-30 | 上海斐讯数据通信技术有限公司 | 一种安卓系统中Activity间通信的方法和装置 |
CN105354081B (zh) * | 2015-11-26 | 2018-06-12 | 北京奇虎科技有限公司 | 同步绑定服务的方法及装置 |
CN107517188A (zh) * | 2016-06-16 | 2017-12-26 | 大唐软件技术股份有限公司 | 一种基于安卓系统的数据处理方法和装置 |
CN107391272A (zh) * | 2017-06-26 | 2017-11-24 | 北京五八信息技术有限公司 | 多进程数据交互的方法和终端 |
CN107463370B (zh) * | 2017-06-30 | 2021-08-27 | 百度在线网络技术(北京)有限公司 | 跨进程渲染方法及系统 |
CN109933443B (zh) * | 2019-03-07 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 进程间通信方法、装置、计算机设备及可读存储介质 |
CN110807063B (zh) * | 2019-09-27 | 2022-04-01 | 国电南瑞科技股份有限公司 | 基于边缘计算的变电站实时数据快速分发同步系统及方法 |
CN111104621A (zh) * | 2019-11-29 | 2020-05-05 | 紫光云(南京)数字技术有限公司 | 网络视图的内存优化方法、装置、电子设备及计算机可读存储介质 |
CN111352611B (zh) * | 2020-03-04 | 2022-02-01 | 四川长虹电器股份有限公司 | 一种Android应用中实现UI与数据分离的方法 |
CN112532690B (zh) * | 2020-11-04 | 2023-03-24 | 杭州迪普科技股份有限公司 | 一种报文解析方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072385A (zh) * | 2007-06-27 | 2007-11-14 | 蒋晓海 | 一种手机以Socket直连方式实现移动即时通信的方法 |
CN101321096A (zh) * | 2008-07-11 | 2008-12-10 | 北京立通无限科技有限公司 | 基于共享socket的通信处理方法及装置 |
CN101751291A (zh) * | 2009-12-30 | 2010-06-23 | 广东威创视讯科技股份有限公司 | 应用程序共享同一串口的方法与装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030184581A1 (en) * | 2002-04-02 | 2003-10-02 | Bawa Satvinder Singh | Application level integration in support of a distributed network management and service provisioning solution |
-
2011
- 2011-11-30 CN CN201110389055.2A patent/CN102520936B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101072385A (zh) * | 2007-06-27 | 2007-11-14 | 蒋晓海 | 一种手机以Socket直连方式实现移动即时通信的方法 |
CN101321096A (zh) * | 2008-07-11 | 2008-12-10 | 北京立通无限科技有限公司 | 基于共享socket的通信处理方法及装置 |
CN101751291A (zh) * | 2009-12-30 | 2010-06-23 | 广东威创视讯科技股份有限公司 | 应用程序共享同一串口的方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102520936A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102520936B (zh) | 一种在Android上实现Socket通讯服务共享的方法 | |
WO2023077952A1 (zh) | 数据处理方法、系统、相关设备、存储介质及产品 | |
CN102377796B (zh) | 基于OSGi的异构服务集成系统及方法 | |
CN101923485B (zh) | Corba系统中的java远程调用方法 | |
CN101878469B (zh) | 使用公共消息收发接口集成面向服务的体系结构应用程序 | |
CN101739300A (zh) | 一种多媒体终端进程间通讯的方法和系统 | |
US20120096080A1 (en) | Method for activating and deactivating client-side services from a remote server | |
CN104243611A (zh) | 一种基于分发思想的消息服务中间件系统 | |
KR100880536B1 (ko) | 이기종 컴퓨팅 및 서비스 통합을 위한 오픈 프레임워크시스템 | |
CN101465914B (zh) | 融合通信业务网络平台、ias、企业网络平台及通信方法 | |
CN105183452A (zh) | 一种用于配电设备监测基于Spring AOP的远程规约服务中间件 | |
CN108881408A (zh) | 一种基于物联网平台的多业务运行系统 | |
CN106686021A (zh) | 一种服务调用方法和网关 | |
CN111586137A (zh) | 一种基于智能港的物联网中间件系统及物联网系统 | |
CN108540576A (zh) | 跨数据库交互服务平台 | |
CN101697119A (zh) | 基于JavaBean类导入格式取代传统URL访问地址的实现方法 | |
CN102984272B (zh) | 一种远程控制移动终端通信能力的系统及其方法 | |
CN103645959A (zh) | 电信实时系统多进程共享内存池交互组件和方法 | |
CN107391274A (zh) | 离线消息的处理方法及装置 | |
CN110471664A (zh) | 一种基于OSGi框架的异构软件平台统一对接方法 | |
CN105812241A (zh) | 基于Spring Integration的企业应用集成方法和系统 | |
CN103347077A (zh) | 分布式文件系统的数据传输方法和装置 | |
CN102291326B (zh) | 一种终端及其即时通讯应用的管理方法及系统 | |
CN101795513A (zh) | 支持多信道、多协议的城市照明无线监控技术方法 | |
CN106302432A (zh) | 一种基于车联网的通信装置及控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 303-e, Zone C, innovation building, software park, Xiamen Torch hi tech Zone, Xiamen, Fujian, 361000 Patentee after: Xiamen Yaxun Zhilian Technology Co.,Ltd. Country or region after: China Address before: No.46 guanri Road, phase II, software park, Xiamen City, Fujian Province, 361000 Patentee before: XIAMEN YAXON NETWORK Co.,Ltd. Country or region before: China |
|
CP03 | Change of name, title or address |