CN107038076A - 组件系统及组件交互方法 - Google Patents

组件系统及组件交互方法 Download PDF

Info

Publication number
CN107038076A
CN107038076A CN201610939094.8A CN201610939094A CN107038076A CN 107038076 A CN107038076 A CN 107038076A CN 201610939094 A CN201610939094 A CN 201610939094A CN 107038076 A CN107038076 A CN 107038076A
Authority
CN
China
Prior art keywords
component
event
message
incidence relation
bus
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.)
Withdrawn
Application number
CN201610939094.8A
Other languages
English (en)
Inventor
安占磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nubia Technology Co Ltd
Original Assignee
Nubia Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nubia Technology Co Ltd filed Critical Nubia Technology Co Ltd
Priority to CN201610939094.8A priority Critical patent/CN107038076A/zh
Publication of CN107038076A publication Critical patent/CN107038076A/zh
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Abstract

本发明实施例公开一种组件系统及组件交互方法,所述系统包括至少两个组件以及分别与所述组件连接的事件总线;所述事件总线,用于接收所述组件的事件注册的注册请求,根据所述注册请求,关联事件与组件形成关联关系;接收事件推送的推送消息,根据所述关联关系,将所述推送信息发送给对应的组件。在本实施例中,在两个组件之间引入了事件总线,由事件总线协助组件完成信息交互,接触了组件之间的紧耦合,从而也解决了紧耦合导致的开发、设计及维护难度大和内存泄露的问题。

Description

组件系统及组件交互方法
技术领域
本发明涉及电子技术,尤其涉及一种组件系统及组件交互方法。
背景技术
在电子设备,例如,智能移动终端,上运行着各种的应用,功能及界面极其丰富;但是功能的丰富及界面的丰富,是以大量的可以实现特定功能的组件之间的相互调用实现。在现有技术中,任意两个组件是可以直接相互调用,这就导致了组件的紧耦合,这样组件在开发的过程中,会存在模块化开发的难度大,导致开发效率低的问题。在使用的过程中,若一个组件应用另一个组件在完成对应的功能之后,没有关闭;则被其应用的另一个组件也不能关闭,导致这些组件都处于没有任务的状态下,却依然占用着大量的内存,进而导致内存被霸占、内存得不到有效使用的内存泄露现象。
发明内容
有鉴于此,本发明实施例为解决现有技术中存在的至少一个问题而提供一种组件系统及组件交互方法。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种组件系统,包括至少两个组件以及分别与所述组件连接的事件总线;
所述事件总线,用于接收所述组件的事件注册的注册请求,根据所述注册请求,关联事件与组件形成关联关系;接收事件推送的推送消息,根据所述关联关系,将所述推送信息发送给对应的组件。
基于上述方案,所述事件总线包括:
总线模块,用于接收所述注册请求及发送所述推送消息;
管理模块,用于根据所述注册请求,形成所述关联关系,检索所述关联关系,确定接收所述推送信息的组件。
基于上述方案,所述管理模块,还用于对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
基于上述方案,所述事件总线,还用于接收第一组件调用预定事件的调用消息,根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息,根据所述预定事件,将所述第一类推送消息发送给所述第一组件。
基于上述方案,所述事件总线,还用于监听事件执行的执行状况,根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
本发明实施例第二方面提供一种组件交互方法,应用于事件总线中,包括:
接收组件发送的事件的注册请求;
根据所述注册请求,关联事件与组件形成关联关系;
接收事件推送的推送消息;
根据所述关联关系,将所述推送信息发送给对应的组件。
基于上述方案,所述根据所述注册请求,关联事件与组件形成关联关系,包括:
对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
基于上述方案,所述方法还包括:
接收第一组件调用预定事件的调用消息;
根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息;
根据所述预定事件,将所述第一类推送消息发送给所述第一组件。
基于上述方案,所述调用消息包括调用参数;其中,所述调用参数用于所述第二组件执行所述对应操作的输入参数。
基于上述方案,所述方法还包括:
监听事件执行的执行状况;
根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
本发明实施例中,在两个组件之间引入了事件总线,由事件总线协助组件完成信息交互,接触了组件之间的紧耦合,从而也解决了紧耦合导致的开发、设计及维护难度大的问题。与此同时,由于事件总线的引入,组件之间的没有直接的相互引用或调用关系,组件可以根据自己的运行状态,确定过是否释放内存,减少了被其他不需要组件引用其组件的引用导致的内存不能释放的问题,从而减少了内存泄露现象。
附图说明
图1为实现本发明实施例一个移动终端的结构示意图;
图2为如图1所示的移动终端的无线通信系统示意图;
图3为本发明实施例提供的第一种组件系统的结构示意图;
图4为本发明实施例提供的第二种组件系统的结构示意图;
图5为本发明实施例提供的一种组件交互方法的流程示意图;
图6为本发明实施例提供的第三种组件系统的结构示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明的技术方案,并不用于限定本发明的保护范围。
现在将参考附图描述实现本发明各个实施例的移动终端。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。
移动终端可以以各种形式来实施。例如,本发明中描述的终端可以包括诸如移动电话、智能电话、笔记本电脑、数字广播接收器、个人数字助理(PDA)、平板电脑(PAD)、便携式多媒体播放器(PMP)、导航装置等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。下面,假设终端是移动终端。然而,本领域技术人员将理解的是,除了特别用于移动目的的元件之外,根据本发明的实施方式的构造也能够应用于固定类型的终端。
图1为实现本发明各个实施例的移动终端100的硬件结构示意,如图1所示,移动终端100可以包括无线通信单元110、音频/视频(A/V)输入单元120、用户输入单元130、感测单元140、输出单元150、存储器160、接口单元170、控制器180和电源单元190等等。图1示出了具有各种组件的移动终端100,但是应理解的是,并不要求实施所有示出的组件。可以替代地实施更多或更少的组件。将在下面详细描述移动终端100的元件。
无线通信单元110通常包括一个或多个组件,其允许移动终端100与无线通信系统或网络之间的无线电通信。例如,无线通信单元110可以包括广播接收模块111、移动通信模块112、无线互联网模块113、短程通信模块114和位置信息模块115中的至少一个。
广播接收模块111经由广播信道从外部广播管理服务器接收广播信号和/或广播相关信息。广播信道可以包括卫星信道和/或地面信道。广播管理服务器可以是生成并发送广播信号和/或广播相关信息的服务器或者接收之前生成的广播信号和/或广播相关信息并且将其发送给终端的服务器。广播信号可以包括TV广播信号、无线电广播信号、数据广播信号等等。而且,广播信号可以进一步包括与TV或无线电广播信号组合的广播信号。广播相关信息也可以经由移动通信网络提供,并且在该情况下,广播相关信息可以由移动通信模块112来接收。广播信号可以以各种形式存在,例如,其可以以数字多媒体广播(DMB)的电子节目指南(EPG)、数字视频广播手持(DVB-H)的电子服务指南(ESG)等等的形式而存在。广播接收模块111可以通过使用各种类型的广播系统接收信号广播。特别地,广播接收模块111可以通过使用诸如多媒体广播-地面(DMB-T)、数字多媒体广播-卫星(DMB-S)、数字视频广播-手持(DVB-H),前向链路媒体(MediaFLO@)的数据广播系统、地面数字广播综合服务(ISDB-T)等等的数字广播系统接收数字广播。广播接收模块111可以被构造为适合提供广播信号的各种广播系统以及上述数字广播系统。经由广播接收模块111接收的广播信号和/或广播相关信息可以存储在存储器160(或者其它类型的存储介质)中。
移动通信模块112将无线电信号发送到基站(例如,接入点、节点B等等)、外部终端以及服务器中的至少一个和/或从其接收无线电信号。这样的无线电信号可以包括语音通话信号、视频通话信号、或者根据文本和/或多媒体消息发送和/或接收的各种类型的数据。
无线互联网模块113支持移动终端100的无线互联网接入。无线互联网模块113可以内部或外部地耦接到终端。无线互联网模块113所涉及的无线互联网接入技术可以包括无线局域网(WLAN)、无线相容性认证(Wi-Fi)、无线宽带(Wibro)、全球微波互联接入(Wimax)、高速下行链路分组接入(HSDPA)等等。
短程通信模块114是用于支持短程通信的模块。短程通信技术的一些示例包括蓝牙TM、射频识别(RFID)、红外数据协会(IrDA)、超宽带(UWB)、紫蜂TM等等。
位置信息模块115是用于检查或获取移动终端100的位置信息的模块。位置信息模块115的典型示例是全球定位系统(GPS)模块115。根据当前的技术,GPS模块115计算来自三个或更多卫星的距离信息和准确的时间信息并且对于计算的信息应用三角测量法,从而根据经度、纬度和高度准确地计算三维当前位置信息。当前,用于计算位置和时间信息的方法使用三颗卫星并且通过使用另外的一颗卫星校正计算出的位置和时间信息的误差。此外,GPS模块115能够通过实时地连续计算当前位置信息来计算速度信息。
A/V输入单元120用于接收音频或视频信号。A/V输入单元120可以包括相机121和麦克风122,相机121对在视频捕获模式或图像捕获模式中由图像捕获装置获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元151上。经相机121处理后的图像帧可以存储在存储器160(或其它存储介质)中或者经由无线通信单元110进行发送,可以根据移动终端100的构造提供两个或更多相机121。麦克风122可以在电话通话模式、记录模式、语音识别模式等等运行模式中经由麦克风接收声音(音频数据),并且能够将这样的声音处理为音频数据。处理后的音频(语音)数据可以在电话通话模式的情况下转换为可经由移动通信模块112发送到移动通信基站的格式输出。麦克风122可以实施各种类型的噪声消除(或抑制)算法以消除(或抑制)在接收和发送音频信号的过程中产生的噪声或者干扰。
用户输入单元130可以根据用户输入的命令生成键输入数据以控制移动终端100的各种操作。用户输入单元130允许用户输入各种类型的信息,并且可以包括键盘、锅仔片、触摸板(例如,检测由于被接触而导致的电阻、压力、电容等等的变化的触敏组件)、滚轮、摇杆等等。特别地,当触摸板以层的形式叠加在显示单元151上时,可以形成触摸屏。
感测单元140检测移动终端100的当前状态,(例如,移动终端100的打开或关闭状态)、移动终端100的位置、用户对于移动终端100的接触(即,触摸输入)的有无、移动终端100的取向、移动终端100的加速或减速移动和方向等等,并且生成用于控制移动终端100的操作的命令或信号。例如,当移动终端100实施为滑动型移动电话时,感测单元140可以感测该滑动型电话是打开还是关闭。另外,感测单元140能够检测电源单元190是否提供电力或者接口单元170是否与外部装置耦接。
接口单元170用作至少一个外部装置与移动终端100连接可以通过的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口(典型示例是通用串行总线USB端口)、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。识别模块可以是存储用于验证用户使用移动终端100的各种信息并且可以包括用户识别模块(UIM)、客户识别模块(SIM)、通用客户识别模块(USIM)等等。另外,具有识别模块的装置(下面称为“识别装置”)可以采取智能卡的形式,因此,识别装置可以经由端口或其它连接装置与移动终端100连接。
接口单元170可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到移动终端100内的一个或多个元件或者可以用于在移动终端100和外部装置之间传输数据。
另外,当移动终端100与外部底座连接时,接口单元170可以用作允许通过其将电力从底座提供到移动终端100的路径或者可以用作允许从底座输入的各种命令信号通过其传输到移动终端100的路径。从底座输入的各种命令信号或电力可以用作用于识别移动终端100是否准确地安装在底座上的信号。
输出单元150被构造为以视觉、音频和/或触觉方式提供输出信号(例如,音频信号、视频信号、警报信号、振动信号等等)。输出单元150可以包括显示单元151、音频输出模块152、警报单元153等等。
显示单元151可以显示在移动终端100中处理的信息。例如,当移动终端100处于电话通话模式时,显示单元151可以显示与通话或其它通信(例如,文本消息收发、多媒体文件下载等等)相关的用户界面(UI)或图形用户界面(GUI)。当移动终端100处于视频通话模式或者图像捕获模式时,显示单元151可以显示捕获的图像和/或接收的图像、示出视频或图像以及相关功能的UI或GUI等等。
同时,当显示单元151和触摸板以层的形式彼此叠加以形成触摸屏时,显示单元151可以用作输入装置和输出装置。显示单元151可以包括液晶显示器(LCD)、薄膜晶体管LCD(TFT-LCD)、有机发光二极管(OLED)显示器、柔性显示器、三维(3D)显示器等等中的至少一种。这些显示器中的一些可以被构造为透明状以允许用户从外部观看,这可以称为透明显示器,典型的透明显示器可以例如为TOLED(透明有机发光二极管)显示器等等。根据特定想要的实施方式,移动终端100可以包括两个或更多显示单元(或其它显示装置),例如,移动终端100可以包括外部显示单元(未示出)和内部显示单元(未示出)。触摸屏可用于检测触摸输入压力以及触摸输入位置和触摸输入面积。
音频输出模块152可以在移动终端100处于呼叫信号接收模式、通话模式、记录模式、语音识别模式、广播接收模式等等模式下时,将无线通信单元110接收的或者在存储器160中存储的音频数据转换音频信号并且输出为声音。而且,音频输出模块152可以提供与移动终端100执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出模块152可以包括扬声器、蜂鸣器等等。
警报单元153可以提供输出以将事件的发生通知给移动终端100。典型的事件可以包括呼叫接收、消息接收、键信号输入、触摸输入等等。除了音频或视频输出之外,警报单元153可以以不同的方式提供输出以通知事件的发生。例如,警报单元153可以以振动的形式提供输出,当接收到呼叫、消息或一些其它进入通信(incoming communication)时,警报单元153可以提供触觉输出(即,振动)以将其通知给用户。通过提供这样的触觉输出,即使在用户的移动电话处于用户的口袋中时,用户也能够识别出各种事件的发生。警报单元153也可以经由显示单元151或音频输出模块152提供通知事件的发生的输出。
存储器160可以存储由控制器180执行的处理和控制操作的软件程序等等,或者可以暂时地存储已经输出或将要输出的数据(例如,电话簿、消息、静态图像、视频等等)。而且,存储器160可以存储关于当触摸施加到触摸屏时输出的各种方式的振动和音频信号的数据。
存储器160可以包括至少一种类型的存储介质,所述存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等等。而且,移动终端100可以与通过网络连接执行存储器160的存储功能的网络存储装置协作。
控制器180通常控制移动终端100的总体操作。例如,控制器180执行与语音通话、数据通信、视频通话等等相关的控制和处理。另外,控制器180可以包括用于再现或回放多媒体数据的多媒体模块181,多媒体模块181可以构造在控制器180内,或者可以构造为与控制器180分离。控制器180可以执行模式识别处理,以将在触摸屏上执行的手写输入或者图片绘制输入识别为字符或图像。
电源单元190在控制器180的控制下接收外部电力或内部电力并且提供操作各元件和组件所需的适当的电力。
这里描述的各种实施方式可以以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。对于硬件实施,这里描述的实施方式可以通过使用特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施,在一些情况下,这样的实施方式可以在控制器180中实施。对于软件实施,诸如过程或功能的实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序(或程序)来实施,软件代码可以存储在存储器160中并且由控制器180执行。
至此,已经按照其功能描述了移动终端100。下面,为了简要起见,将描述诸如折叠型、直板型、摆动型、滑动型移动终端100等等的各种类型的移动终端100中的滑动型移动终端100作为示例。因此,本发明能够应用于任何类型的移动终端100,并且不限于滑动型移动终端100。
如图1中所示的移动终端100可以被构造为利用经由帧或分组发送数据的诸如有线和无线通信系统以及基于卫星的通信系统来操作。
现在将参考图2描述其中根据本发明的移动终端100能够操作的通信系统。
这样的通信系统可以使用不同的空中接口和/或物理层。例如,由通信系统使用的空中接口包括例如频分多址(FDMA)、时分多址(TDMA)、码分多址(CDMA)和通用移动通信系统(UMTS)(特别地,长期演进(LTE))、全球移动通信系统(GSM)等等。作为非限制性示例,下面的描述涉及CDMA通信系统,但是这样的教导同样适用于其它类型的系统。
参考图2,CDMA无线通信系统可以包括多个移动终端100、多个基站(BS)270、基站控制器(BSC)275和移动交换中心(MSC)280。MSC 280被构造为与公共电话交换网络(PSTN)290形成接口。MSC 280还被构造为与可以经由回程线路耦接到基站270的BSC 275形成接口。回程线路可以根据若干己知的接口中的任一种来构造,所述接口包括例如E1/T1、ATM、IP、PPP、帧中继、HDSL、ADSL或xDSL。将理解的是,如图2中所示的系统可以包括多个BSC2750。
每个BS 270可以服务一个或多个分区(或区域),由多向天线或指向特定方向的天线覆盖的每个分区放射状地远离BS 270。或者,每个分区可以由用于分集接收的两个或更多天线覆盖。每个BS 270可以被构造为支持多个频率分配,并且每个频率分配具有特定频谱(例如,1.25MHz,5MHz等等)。
分区与频率分配的交叉可以被称为CDMA信道。BS 270也可以被称为基站收发器子系统(BTS)或者其它等效术语。在这样的情况下,术语“基站”可以用于笼统地表示单个BSC275和至少一个BS 270。基站也可以被称为“蜂窝站”。或者,特定BS 270的各分区可以被称为多个蜂窝站。
如图2中所示,广播发射器(BT)295将广播信号发送给在系统内操作的移动终端100。如图1中所示的广播接收模块111被设置在移动终端100处以接收由BT295发送的广播信号。在图2中,示出了几个卫星300,例如可以采用全球定位系统(GPS)卫星300。卫星300帮助定位多个移动终端100中的至少一个。
在图2中,描绘了多个卫星300,但是理解的是,可以利用任何数目的卫星获得有用的定位信息。如图1中所示的GPS模块115通常被构造为与卫星300配合以获得想要的定位信息。替代GPS跟踪技术或者在GPS跟踪技术之外,可以使用可以跟踪移动终端100的位置的其它技术。另外,至少一个GPS卫星300可以选择性地或者额外地处理卫星DMB传输。
作为无线通信系统的一个典型操作,BS 270接收来自各种移动终端100的反向链路信号。移动终端100通常参与通话、消息收发和其它类型的通信。特定基站270接收的每个反向链路信号被在特定BS 270内进行处理。获得的数据被转发给相关的BSC 275。BSC提供通话资源分配和包括BS 270之间的软切换过程的协调的移动管理功能。BSC275还将接收到的数据路由到MSC 280,其提供用于与PSTN 290形成接口的额外的路由服务。类似地,PSTN290与MSC280形成接口,MSC与BSC 275形成接口,并且BSC 275相应地控制BS 270以将正向链路信号发送到移动终端100。
移动终端中无线通信单元110的移动通信模块112基于移动终端内置的接入移动通信网络(如2G/3G/4G等移动通信网络)的必要数据(包括用户识别信息和鉴权信息)接入移动通信网络为移动终端用户的网页浏览、网络多媒体播放等业务传输移动通信数据(包括上行的移动通信数据和下行的移动通信数据)。
无线通信单元110的无线互联网模块113通过运行无线热点的相关协议功能而实现无线热点的功能,无线热点支持多个移动终端(移动终端之外的任意移动终端)接入,通过复用移动通信模块112与移动通信网络之间的移动通信连接为移动终端用户的网页浏览、网络多媒体播放等业务传输移动通信数据(包括上行的移动通信数据和下行的移动通信数据),由于移动终端实质上是复用移动终端与通信网络之间的移动通信连接传输移动通信数据的,因此移动终端消耗的移动通信数据的流量由通信网络侧的计费实体计入移动终端的通信资费,从而消耗移动终端签约使用的通信资费中包括的移动通信数据的数据流量。
如图3所示,本发明实施例提供一种组件系统,,包括至少两个组件310以及分别与所述组件310连接的事件总线320;
所述事件总线320,用于接收所述组件的事件注册的注册请求,根据所述注册请求,关联事件与组件形成关联关系;接收事件推送的推送消息,根据所述关联关系,将所述推送信息发送给对应的组件。
至少两个组件包括组件A、组件B及组件C。
例如,组件A会想要获得组件B的状态信息,根据组件B的状态信息执行对应的状态。在本实施例中所述组件A会向事件总线320发送注册请求。所述注册请求中可包括事件属性。这里的事件属性可包括组件标识以及关注参数等。所述组件标识可为组件A关注的组件B的组件标识,所述关注参数可用于指示所述组件A关注组件B的哪些状态。总之,所述组件标识可用于指示组件A所想要关注的组件的标识信息,所述关注参数可用于指示组件A所需要获取的信息。当然,所述属性也可以仅包括关注参数,事件总线在接收到关注参数之后,根据关注参数及对应组件的功能,确定组件A关注哪些组件及对应组件的哪些状态。当然,所述注册请求的具体构成内容有多种,不局限于上述任意一种。
事件总线320在接收到注册请求之后,会存储事件属性,通过事件属性的存储,会建立组件和事件的关联关系。这里的关联关系可体现为对应关系。这样方便,后续总线在转发信息的过程中,接收对象的检索。
总之,在本实施例中所述组件系统,不再是组件之间直接相连,而是在在组件之间引入了事件总线,组件通过事件总线进行相互调用或对应组件的状态信息的获取。这样的话,显然就简便的解决了组件之间紧耦合的现象,从而解决了仅耦合导致的开发效率低、维护难度大及内存泄露等问题。
值得注意的是:在本实施例中若一个组件关注或订阅另一个组件,则一旦事件总线320根据注册请求注册了之后,若事件未发生变化,则该事件一致有效。例如,组件c关注了组件d,并注册了事件,则组件d会自动一次或多次获取组件c的变化信息,直至该事件无效或删除。
如图4所示,所述事件总线320包括:
总线模块321,用于接收所述注册请求及发送所述推送消息;
管理模块322,用于根据所述注册请求,形成所述关联关系,检索所述关联关系,确定接收所述推送信息的组件。
在本实施例中所述事件总线320包括两个功能模块,分别是总线模块321和管理模块322,总线模块321主要负责信息的交互,而所述管理模块322主要负责关联关系的建立和检索。通过这两个模块的设置,可以实现事件总线操作的模块化,避免操作混乱,提升事件总线的有序化,减少因混乱导致的处理故障。
在一些实施例中,所述关联模块322,还用于对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
基于上述例子,例如,组件A和组件C都是需要根据组件B的状态执行对应功能的组件。这样的话,组件A和组件C都需要获得组件B的状态信息。可以将组件A和组件B对组件C的状态信息的获取,设置为一个事件类型,这样的话,该事件类型包括一个被关注或被调用的组件与多个组件之间的关联关系。相对于任意两个组件之间的调用或关注都建立一个单独的事件,可以减少事件总线内事件属性的存储条数和数据存储量,可以提升检索效率。
在一些实施例中,所述事件总线320,还用于接收第一组件调用预定事件的调用消息,根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息,根据所述预定事件,将所述第一类推送消息发送给所述第一组件。本实施例中所述第一类推送消息为所述推送消息中基于调用消息产生的所述推送消息。在具体实现时,所述推送消息还包括组件在没有调用消息触发的情况下,自动上报的第二类推送消息。例如,某些组件自动上报自身运行状态的第二类推送消息。
例如,组件C封装有三个函数,组件B在自身的执行过程中,可能需要调用组件C中的函数a。且组件B调用函数C时,与自身的调用参数相关。此时,在注册阶段,组件B通过注册请求,在事件总线320中注册相应的事件,从而形成了组件B和组件C之间的关联关系。当组件B需要调用组件C中的函数a时,组件C发送所述调用消息,所述调用消息至少包括所述调用参数,还可包括调用事件的事件标识,这样的话,事件总线320接收到所述调用消息之后,确定组件C被调用,并将调用参数传输给组件C,组件C基于调用参数,进行函数a的函数运算,并将运算结果主动推送给事件总线320,事件总线320通过关联关系的检索,确定该运算结果是发送给组件B的,则会发送给组件B。这里的组件B即为所述第一组件,所述组件C为第二组件。
结合上述实施例,总线模块321用于调用消息的接收、推送消息的发送及给第二组件的触发消息的发送,而所述管理模块321主要用于触发消息的生成、关联关系的检索等。所述触发消息至少包括调用参数等信息。
在一些实施例中,所述事件总线320,还用于监听事件执行的执行状况,根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
当一个组件自身的功能处理完了,可以关闭了,所述事件总线320还会确定当前是否有其他组件以事件的形式关注或调用该组件码,若没有则可以通过状态消息的发送告知对应的组件,没有其他组件的关注或调用,这样对该组件就可以关闭了,可以释放其占用的内存。所述事件总线320还可以在确定没有其他组件调用该组件时,直接通过关闭指令或内存释放指令的发送,触发该组件关闭及内存的释放,减少内存泄露现象的发生。
如图5所示,本实施例提供给一种组件交互方法,应用于事件总线中,包括:
步骤S510:接收组件发送的事件的注册请求;
步骤S520:根据所述注册请求,关联事件与组件形成关联关系;
步骤S530:接收事件推送的推送消息;
步骤S540:根据所述关联关系,将所述推送信息发送给对应的组件。
本实施例提供了一种应用于前述的连接两个组件的事件总线中。首先,在进行组件之间的交互之前,需要接收组件的注册请求,该注册请求表面请求注册的组件想要调用或关注其他组件。若关注其他组件,则需要获取其他组件的运行状态,若调用其他组件则需要调用其他组件的一个或多个部分的功能,而且需要向被调用的组件传输调用参数。
事件总线根据注册请求,关联事件与组件形成关联关系,该关联关系主要包括事件属性,该事件属性可包括相互关注的组件和调用的组件之间的对应关系等信息。
接收到推行消息之后,会通过检索所述关联关系,将其从一个或多个组件接收到的推送信息发送给对应的组件,这样就完成了组件之间的交互,相对于现有技术中组件之间直接交互的方法,解除了组件之间的紧耦合关系,提升了开发效率、降低了维护难度、减少了内存泄露现象以及执行混乱的问题。
在一些实施例中,所述步骤S520可包括:对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
在具体实现时,任意两个组件之间的关注或调用都可以形成一个事件,这样就会导致事件很多的问题。在本实施例中进行事件分类,相当于进行事件聚合,通过事件属性反映一个组件被多个组件调用或关注的关联关系,这样就可以减少事件总线内事件的条数和事件属性的存储数据量。
在一些实施例中,所述方法还包括:
接收第一组件调用预定事件的调用消息;
根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息;
根据所述预定事件,将所述第一类推送消息发送给所述第一组件。
若一个组件关注另一个组件,被关注的组件自动上报其状态信息;这样事件总线接收到表征状态的推送消息,就会自动推送给关注其的组件。在本实施例中,第一组件关注第二组件,第一组件在需要调用第二组件时内,通过向事件总线发送调用信息,以事件总线为传输的中间节点,完成第二组件的调用。这里的预定事件可为任意一个事件。具体如,所述调用消息包括调用参数;其中,所述调用参数用于所述第二组件执行所述对应操作的输入参数。这样方便第二组件有针对性的返回调用结果。
在某些实施例中,所述方法还包括:监听事件执行的执行状况;根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
在本实施例中通过所述执行状态信息的发送,可以减少某些不被关注、不被调用的组件的关闭,从而实现内容的释放,提升内存的有效使用率,减少内存泄露现象的出现。
以下结合上述实施例提供几个具体示例:
示例一:
本示例使用事件总线对各组件之间的交互进行管理;组件之间不进行直接的交互,将需要执行的交互以事件的形式注册至事件总线;由总线统一调度组件的交互。同时增加事件类型的标识,每个组件可以在总线中注册多个事件类型,进行多类型交互。这样,可以有效的避免不同组件之间相互持有对象的引用,不但有效的降低了组件之间的耦合度,同时也大大的降低了内存泄露的可能性。
在安州Android应用开发过程中,经常面临不同页面之间的事件监听,需要在不同的页面之间设置监听器对象;也经常面临在不同线程之间进行交互;更有甚者可能需要穿透多个类进行事件监听。各种各样的场景都需要各种组件之间进行引用的传递,组件对象的引用网络相当复杂,耦合度极高;对于框架的设计和开发都带来不小的影响;在应用运行期间,大量的内存泄露也多是由于对象高耦合所引起。
针对上述当前移动开发所面临的问题,本方案采用了使用事件总线对各组件之间的交互进行管理;组件之间不进行直接的交互,将需要执行的交互以事件的形式注册至事件总线;由总线统一调度组件的交互。同时增加事件类型的标识,每个组件可以在总线中注册多个事件类型,进行多类型交互。这样,可以有效的避免不同组件之间相互持有对象的引用,不但有效的降低了组件之间的耦合度,同时也大大的降低了内存泄露的可能性。
示例一:
如图6所示,本示例提供一种组件系统,包括总线模块、管理模块、事件订阅对象和事件发布模块。
总线模块负责解耦不同组件之间的交互。既接收事件订阅对象对不同类型的注册;也接收事件发布对象的事件推送。当接收到事件订阅对象的注册后,将其监听的事件类型交由管理模块进行管理;当接收到事件发布对象推送的消息后,调用管理模块检索注册相应事件的对象,进而触发执行;
管理模块,当接收到总线模块的事件注册后,管理模块,对接收到的事件进行分门别类的索引。以事件类型为索引,将注册了本事件类型的组件进行关联;当接收到总线模块的检索请求后,根据检索的事件类型,依次调用本事件所关联的组件,触发每一个组件事件的执行;
事件订阅对象其实是参与交互的组件2,其目的是监听其他组件的状态进而做出相应的反应。本模型中,其无需和具体的组件进行接触式交互;仅仅需要将其关心的事件类型注册至事件总线即可;当有符合需求的事件发生时,总线会回调订阅对象的相应方法;
事件发布对象也是参与交互的组件2。其状态的改变会影响其他组件的状态。按照正常的流程,其应该持有其他组件的引用,当自身状态发生改变时,调用其他组件的相应方法。在本模型中,其无需关心到底有哪些组件在关心自身的状态,仅仅需要将事件发布到事件总线模型。
以下提供一种具体的交互流程:
事件订阅对象将自身关心的事件类型注册至事件总线;
事件总线管理模块对事件订阅对象的事件进行索引;
事件发布对象发布状态改变事件到总线模块;
管理模块检索相应事件的注册组件,依次触发相应组件的方法;
通过上述步骤就可以有效的避免不同组件之间相互持有对象的引用,不但有效的降低了组件之间的耦合度,同时也大大的降低了内存泄露的可能性。
本示例采用基于事件总线的方式对各组件之间的交互进行管理,避免组件之间的直接交互,降低组件之间的耦合度,同时也大大的降低了内存泄露的可能性。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种组件系统,其特征在于,包括至少两个组件以及分别与所述组件连接的事件总线;
所述事件总线,用于接收所述组件的事件注册的注册请求,根据所述注册请求,关联事件与组件形成关联关系;接收事件推送的推送消息,根据所述关联关系,将所述推送信息发送给对应的组件。
2.根据权利要求1所述的系统,其特征在于,
所述事件总线包括:
总线模块,用于接收所述注册请求及发送所述推送消息;
管理模块,用于根据所述注册请求,形成所述关联关系,检索所述关联关系,确定接收所述推送信息的组件。
3.根据权利要求1或2所述的系统,其特征在于,
所述管理模块,还用于对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
4.根据权利要1或2所述的系统,其特征在于,
所述事件总线,还用于接收第一组件调用预定事件的调用消息,根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息,根据所述预定事件,将所述第一类推送消息发送给所述第一组件。
5.根据权利要求1或2所述的系统,其特征在于,
所述事件总线,还用于监听事件执行的执行状况,根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
6.一种组件交互方法,其特征在于,应用于事件总线中,包括:
接收组件发送的事件的注册请求;
根据所述注册请求,关联事件与组件形成关联关系;
接收事件推送的推送消息;
根据所述关联关系,将所述推送信息发送给对应的组件。
7.根据权利要求1所述的方法,其特征在于,
所述根据所述注册请求,关联事件与组件形成关联关系,包括:
对所述事件进行分类,建立每个类型事件与一个或多个组件之间的关联关系。
8.根据权利要7所述的方法,其特征在于,
所述方法还包括:
接收第一组件调用预定事件的调用消息;
根据所述调用消息触发所述预定事件对应的第二组件执行对应操作,并接收所述第二组件执行对应操作之后返回的第一类推送消息;
根据所述预定事件,将所述第一类推送消息发送给所述第一组件。
9.根据权利要求8所述的方法,其特征在于,
所述调用消息包括调用参数;其中,所述调用参数用于所述第二组件执行所述对应操作的输入参数。
10.根据权利要求6或7所述的方法,其特征在于,
所述方法还包括:
监听事件执行的执行状况;
根据所述执行状况向对对应组件发送执行状态消息;其中,所述执行状态消息用于对应组件确定是否释放内存。
CN201610939094.8A 2016-10-25 2016-10-25 组件系统及组件交互方法 Withdrawn CN107038076A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610939094.8A CN107038076A (zh) 2016-10-25 2016-10-25 组件系统及组件交互方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610939094.8A CN107038076A (zh) 2016-10-25 2016-10-25 组件系统及组件交互方法

Publications (1)

Publication Number Publication Date
CN107038076A true CN107038076A (zh) 2017-08-11

Family

ID=59532259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610939094.8A Withdrawn CN107038076A (zh) 2016-10-25 2016-10-25 组件系统及组件交互方法

Country Status (1)

Country Link
CN (1) CN107038076A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107632885A (zh) * 2017-09-26 2018-01-26 郑州云海信息技术有限公司 组件间的回调管理方法和装置
CN107729075A (zh) * 2017-09-27 2018-02-23 北京奇艺世纪科技有限公司 活动组件销毁控制方法及装置
CN107943541A (zh) * 2017-11-22 2018-04-20 竞技世界(北京)网络技术有限公司 一种Windows本地组件的通讯方法
CN107943539A (zh) * 2017-11-16 2018-04-20 武汉斗鱼网络科技有限公司 应用页面启动方法和应用页面启动装置
CN108958717A (zh) * 2018-06-28 2018-12-07 深圳数字动能信息技术有限公司 C++事件总线实现方法
CN110321231A (zh) * 2018-03-29 2019-10-11 优视科技(中国)有限公司 事件触发方法及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101552735A (zh) * 2008-03-31 2009-10-07 上海宝信软件股份有限公司 基于订阅模式的可插拔消息总线装置及其实现方法
CN103546476A (zh) * 2013-10-30 2014-01-29 北京华胜天成科技股份有限公司 页面组件之间的消息传递方法及系统
US20140350888A1 (en) * 2013-05-24 2014-11-27 Software Ag Self-monitoring event-based system and method
CN104360904A (zh) * 2014-10-16 2015-02-18 四川长虹电器股份有限公司 基于事件总线的模块间消息传递机制
US8972637B1 (en) * 2012-12-28 2015-03-03 Emc Corporation Governance of storage
CN104598226A (zh) * 2014-12-31 2015-05-06 天津南大通用数据技术股份有限公司 一种基于Flex的图表交互的设计方法
US9223640B2 (en) * 2012-08-06 2015-12-29 Alcatel Lucent Strategy based event notification chain
CN105573756A (zh) * 2015-12-15 2016-05-11 金蝶软件(中国)有限公司 一种脚本语言扩展方法及事件总线架构

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101552735A (zh) * 2008-03-31 2009-10-07 上海宝信软件股份有限公司 基于订阅模式的可插拔消息总线装置及其实现方法
US9223640B2 (en) * 2012-08-06 2015-12-29 Alcatel Lucent Strategy based event notification chain
US8972637B1 (en) * 2012-12-28 2015-03-03 Emc Corporation Governance of storage
US20140350888A1 (en) * 2013-05-24 2014-11-27 Software Ag Self-monitoring event-based system and method
CN103546476A (zh) * 2013-10-30 2014-01-29 北京华胜天成科技股份有限公司 页面组件之间的消息传递方法及系统
CN104360904A (zh) * 2014-10-16 2015-02-18 四川长虹电器股份有限公司 基于事件总线的模块间消息传递机制
CN104598226A (zh) * 2014-12-31 2015-05-06 天津南大通用数据技术股份有限公司 一种基于Flex的图表交互的设计方法
CN105573756A (zh) * 2015-12-15 2016-05-11 金蝶软件(中国)有限公司 一种脚本语言扩展方法及事件总线架构

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MARKUS JUNGINGER: "SubscriberMethodFinder.java", 《HTTP://GITHUB.COM/GREENROBOT/EVENTBUS/RELEASES/TAG/V3.0.0》 *
刘望舒: "Android事件总线", 《HTTPS://WWW.JIANSHU.COM/P/2A0540330580-HTTPS://WWW.JIANSHU.COM/P/76B18030E305》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107632885A (zh) * 2017-09-26 2018-01-26 郑州云海信息技术有限公司 组件间的回调管理方法和装置
CN107729075A (zh) * 2017-09-27 2018-02-23 北京奇艺世纪科技有限公司 活动组件销毁控制方法及装置
CN107943539A (zh) * 2017-11-16 2018-04-20 武汉斗鱼网络科技有限公司 应用页面启动方法和应用页面启动装置
CN107943539B (zh) * 2017-11-16 2021-11-09 武汉斗鱼网络科技有限公司 应用页面启动方法和应用页面启动装置
CN107943541A (zh) * 2017-11-22 2018-04-20 竞技世界(北京)网络技术有限公司 一种Windows本地组件的通讯方法
CN107943541B (zh) * 2017-11-22 2020-12-04 竞技世界(北京)网络技术有限公司 一种Windows本地组件的通讯方法
CN110321231A (zh) * 2018-03-29 2019-10-11 优视科技(中国)有限公司 事件触发方法及装置
CN110321231B (zh) * 2018-03-29 2022-02-01 阿里巴巴(中国)有限公司 事件触发方法及装置
CN108958717A (zh) * 2018-06-28 2018-12-07 深圳数字动能信息技术有限公司 C++事件总线实现方法
CN108958717B (zh) * 2018-06-28 2023-02-28 深圳数字动能信息技术有限公司 C++事件总线实现方法

Similar Documents

Publication Publication Date Title
CN107038076A (zh) 组件系统及组件交互方法
CN105228210B (zh) 多通道路由方法及装置
CN105094531B (zh) 一种图标排序系统和方法
CN105098895B (zh) 充电控制的装置及方法
CN104731512B (zh) 图片分享的方法、装置及终端
CN107659841A (zh) 一种信息处理方法及终端
CN106844032A (zh) 一种终端应用的存储处理方法和装置
CN104731411B (zh) 移动终端的单击动作识别方法及装置
CN106550128A (zh) 一种内存管理方法及终端
CN106803860A (zh) 一种终端应用的存储处理方法和装置
CN106488420A (zh) 来电处理方法、装置及系统
CN106843723A (zh) 一种应用程序关联运用方法和移动终端
CN106095464B (zh) 一种应用程序无痕运行的方法及装置
CN107360214A (zh) 一种消息推送处理方法、消息接收处理方法及装置
CN106681722A (zh) 一种进程处理方法及电子设备
CN107135298A (zh) 来电拦截方法和装置
CN105187621B (zh) 消息提示的方法、装置及终端
CN106681768A (zh) 一种进程控制方法及电子设备
CN106713121A (zh) 一种获取即时消息状态信息的装置及方法
CN106484534A (zh) 用于展示的移动终端的控制方法及控制装置
CN107071161A (zh) 一种状态栏中图标的聚合显示方法和移动终端
CN106941568A (zh) 一种Toast弹窗优化显示方法、装置以及Toast弹窗调度方法和装置
CN106897135A (zh) 一种应用中断后的恢复方法及装置
CN104932818B (zh) 移动终端的显示控制方法及装置
CN105159644B (zh) 一种移动终端和实现分屏处理的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication

Application publication date: 20170811

WW01 Invention patent application withdrawn after publication