掌桥专利:专业的专利平台
掌桥专利
首页

程序崩溃信息的获取方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 13:45:04


程序崩溃信息的获取方法、装置、电子设备及存储介质

技术领域

本申请涉及数据处理技术领域,具体而言,涉及一种程序崩溃信息的获取方法、装置、电子设备及存储介质。

背景技术

应用程序(Application,APP)的运行稳定与否直接影响用户体验,不稳定的APP是导致用户进行差评和流失的主要原因之一。在APP发布前,测试人员会进行测试以此检测APP中可能存在的崩溃,并将检测到的崩溃提交给开发人员进行修复。目前,检测APP可能存在的崩溃的方法通常是:测试人员测试,记录出现崩溃时的现象及复现流程,并将测试出的崩溃信息提交给开发人员解决。但是,对于一些难以复现的崩溃,因开发人员对该崩溃无法复现,从而导致开发人员没有APP运行时的崩溃信息,便也无法分析解决该崩溃。

发明内容

本申请实施例的目的在于提供一种程序崩溃信息的获取方法、装置、电子设备及存储介质,以改善“现有的获取崩溃信息的方式难以获取到较全面的,且难以复现的崩溃的崩溃信息”的问题。

本发明是这样实现的:

第一方面,本申请实施例提供一种程序崩溃信息的获取方法,所述方法包括:在程序运行期间,记录所述程序的运行数据,所述运行数据包括所述程序的数据交互信息和/或所述程序调用的方法的名称和调用顺序;在所述程序崩溃时,调取所述程序崩溃前记录的所有所述运行数据。

在本申请实施例中,因运行数据是在程序运行期间记录的,且运行数据包括程序运行期间的数据交互信息和/或程序运行期间调用的方法的名称和调用顺序,相较于现有技术通过测试获取崩溃信息,该方式能够获取更全面的崩溃信息,并且能够记录到难以复现的数据,所以通过该运行数据,能够帮助开发人员快速修复该崩溃。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述运行数据为所述程序调用的方法的名称和调用顺序,所述记录所述程序的运行数据,包括:当所述程序调用所述方法时,执行预设追踪方法记录所述方法的名称以及所述方法被调用的顺序。

在本申请实施例中,通过上述方式,能在调用运行库中的方法时,先执行预设追踪方法,使该预设追踪方法能将调用的方法的名称以及该方法被调用的顺序进行记录,从而在调用方法时,方便快捷地记录该方法的名称和调用顺序。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述运行数据为所述数据交互信息,所述记录所述程序的运行数据,包括:监听NSURLSession发起的网络请求和接收到的响应消息,并记录监听到的网络请求中的请求信息和响应消息中的响应信息,所述NSURLSession为用于处理基于HTTP/HTTPS请求的类。

在本申请实施例中,通过上述方式,能方便快捷地获取并记录到NSURLSession发起的网络请求中的请求信息和接收到的响应消息中的响应信息。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述运行数据为所述数据交互信息,所述记录所述程序的运行数据,包括:监听MQTT发出的发布消息和接收到的订阅消息,并记录监听到的发布消息中的发布信息和订阅消息中的订阅信息,所述MQTT为ISO标准下基于发布或订阅范式的消息协议。

在本申请实施例中,通过上述方式,能方便快捷地获取并记录到MQTT发出的发布消息中的发布信息和订阅消息中的订阅信息。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述方法还包括:在所述程序崩溃时,对所述程序的当前运行界面进行截图,并保存所述截图。

在本申请实施例中,通过在程序崩溃时,对该程序的当前运行界面进行截图,并保存该截图,使得开发人员能根据保存的截图定位崩溃发生的位置,从而帮助开发人员快速修复该崩溃。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述保存所述截图,包括:将所述截图按截图时间进行命名并保存。

在本申请实施例中,通过对程序崩溃时的截图按截图时间进行命名,从而能帮助开发人员能按崩溃发生的时间顺序识别出对应的截图,进而帮助开发人员更快地修复该崩溃。

结合上述第一方面提供的技术方案,在一些可能的实现方式中,所述方法还包括:在所述程序崩溃时,通过预设的异常处理函数获取所述程序崩溃的崩溃信息,所述崩溃信息包括崩溃的类型、原因和调用堆栈信息。

在本申请实施例中,通过预设的异常处理函数在程序崩溃时获取程序崩溃的崩溃信息,使得开发人员能根据该崩溃类型、原因和调用堆栈信息快速修复该崩溃。

第二方面,本申请实施例提供一种程序崩溃信息的获取装置,所述装置包括:处理模块,用于在程序运行期间,记录所述程序的运行数据,所述运行数据包括所述程序的数据交互信息和/或所述程序调用的方法的名称和调用顺序;获取模块,用于在所述程序崩溃时,调取所述程序崩溃前记录的所有所述运行数据。

第三方面,本申请实施例提供一种电子设备,包括:处理器和存储器,所述处理器和所述存储器连接;所述存储器用于存储程序;所述处理器用于调用存储在所述存储器中的程序,执行如上述第一方面实施例和/或结合上述第一方面实施例的一些可能的实现方式提供的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器运行时执行如上述第一方面实施例和/或结合上述第一方面实施例的一些可能的实现方式提供的方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种程序崩溃信息的获取方法的步骤流程图。

图2为本申请实施例提供的一种程序崩溃信息的获取装置的模块框图。

图3为本申请实施例提供的一种电子设备的模块框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

鉴于现有的获取崩溃信息的方式难以获取到较全面的,且难以复现的崩溃的崩溃信息,本申请发明人经过研究探索,提出以下实施例以解决上述问题。

本申请提供的一种程序崩溃信息的获取方法,该方法可应用于iOS操作系统,用于在iOS软件开发中,捕获程序崩溃信息。

以下结合图1对一种程序崩溃信息的获取方法的具体流程及步骤进行描述。需要说明的是,本申请实施例提供的程序崩溃信息的获取方法不以图1及以下所示的顺序为限制。

步骤S101:在程序运行期间,记录程序的运行数据,运行数据包括程序的数据交互信息和/或程序调用的方法的名称和调用顺序。

在本申请实施例中,在程序运行期间,可只记录程序的数据交互信息;或,只记录程序调用的方法的名称和调用顺序;或,将程序的数据交互信息和程序调用的方法的名称与调用顺序都进行记录。

可选的,运行数据为程序调用的方法的名称和调用顺序,相应的,当程序调用方法时,执行预设追踪方法记录方法的名称以及方法被调用的顺序。通过上述方式,可在程序运行期间调用任一方法时,通过执行预设追踪函数方便快捷地记录该方法的名称以及该方法被调用的顺序。

具体的,在程序运行前,使用runtime中的class_copyMethodList遍历类的方法,且对每个方法都执行以下步骤:一、将每一个原方法指向的执行代码块IMP换成_objc_msgForward指向的执行代码块,这样使得在调用原方法时,实际执行了_objc_msgForward的实现代码,从而触发Objective-C的消息转发机制,执行forwardInvocation:方法。二、设置一个my_forwardInvocation:方法(即预设追踪方法),利用class_replaceMethod将原forwardInvocation:方法的执行代码块IMP指向my_forwardInvocation:方法的执行代码块。这样原forwardInvocation:方法执行时,实际执行了my_forwardInvocation的代码块。三、利用class_addMethod给当前类新建一个方法new_method,new_method执行代码块IMP指向为原方法的执行代码块IMP,这样在调用新方法new_method实际执行的是原方法。四、实现步骤三中的my_forwardInvocation:方法的代码,使用NSInvocation类来调用步骤三中新建的new_method方法,这样就完成了执行原方法的代码;在my_forwardInvocation中添加记录原方法名称的代码。通过在程序运行前对预设追踪方法进行设置,使得在程序运行期间,当调用runtime中的任一方法时,都先执行预设追踪方法记录调用的方法的名称和该方法被调用的顺序,并在预设追踪方法执行完毕后,继续执行调用的方法。

此外,在汇编方式下,在程序运行前,还可向objc_msgSend进行预设追踪方法的注入,使得在程序运行期间,当调用任一方法时,都先执行预设追踪方法记录调用的方法的名称和该方法被调用的顺序,并在预设追踪方法执行完毕后,继续执行调用的方法。具体的,自定义预设追踪方法hook_objc_msgSend,使用fishhook库提供的方法rebind_symbol将objc_msgSend重新绑定hook_objc_msgSend。在hook_objc_msgSend方法中汇编实现为:对X0-X8、Q0-Q7等寄存器的值压栈,记录上下文信息;记录当前类及调用的方法名称;跳转到调用原始objc_msgSend方法的执行地址;然后恢复寄存器X0-X8、Q0-Q7。

可选的,运行数据为数据交互信息,相应的,监听NSURLSession发起的网络请求和接收到的响应消息,并记录监听到的网络请求中的请求信息和响应消息中的响应信息,上述NSURLSession为用于处理基于HTTP/HTTPS请求的类。其中,上述请求信息可以是输出请求地址、请求参数等信息;上述响应信息可以是输出响应地址,响应数据等信息。通过上述方式,能方便快捷地获取到NSURLSession发起的请求信息和接收到的响应信息。

需要说明的是,对NSURLSession发起的网络请求和接收到的响应消息进行监听的方式有两种,分别是:采用预先埋点的方式和无埋点的方式。

其中,采用预先埋点的方式对NSURLSession发起的网络请求和接收到的响应消息进行监听的具体步骤为:对NSURLSession进行二次封装,在发起网络请求前和接收到数据时都对交互数据进行记录输出。具体的,在对NSURLSession二次封装时,在发起网络请求前,即在调用[task resume]前,记录输出请求地址、请求参数等信息;在接收数据时,通过delegate的方式进行回调的,则在URLSession:dataTask:didReceiveData:方法中记录输出响应地址、响应数据等信息;通过block的方式进行回调的,则直接在block中记录输出响应地址、响应数据等信息。

采用无埋点的方式对NSURLSession发起的网络请求和接收到的响应消息进行监听的具体步骤为:利用runtime分别对开启网络请求的resume方法,以delegate方式接收数据的URLSession:dataTask:didReceiveData:方法,以block方法方式接收数据的dataTaskWithRequest:completionHandler:方法进行交换,达到注入代码,实现对交互数据进行记录输出。

其中,对resume方法进行交换的具体步骤为:对NSURLSessionDataTask类添加分类,在分类添加并实现my_resume方法。在my_resume方法中通过NSURLSessionDataTask的currentRequest属性来获取请求地址、请求参数等信息,从而实现对发起请求时交换数据记录和输出;在最后需要调用my_resume方法达到在交换方法后,能顺利执行原方法resume的代码。接着,在NSURLSessionDataTask的load方法中,利用method_exchangeImpl--ementations对原resume和my_resume进行交换,从而实现调用resume执行my_resume的代码,调用my_resume执行resume的代码。通过上述方式,能实现在调用resume开启网络请求前,对请求地址、请求参数等信息的记录和输出。

对以delegate方式接收数据的URLSession:dataTask:didReceiveData:方法进行交换的具体步骤为:一、对NSURLSession类创建分类,在分类中创建并实现my_sessionWithConfiguration:delegate:delegateQueue:方法;在NSURLSession的load方法中,使用method_exchangeImplementations对原sessionWithConfiguration:delegate:delegateQueue:与my_sessionWithConfig--uration:delegate:delegateQueue:进行交换;二、在NSURLSession类中添加my_URLSession:dataTask:didReceiveData:方法。三、在my_sessionWithCon--figuration:delegate:delegateQueue:方法实现中获取到代理对象delegate;然后对delegate对象利用class_addMethod添加新方法及新方法的实现,其新方法名和实现为步骤二中的my_URLSession:dataTask:didReceiveData:;delegate对象添加新方法和实现成功后,利用method_exchangeImplement--ations,将delegate刚添加的新方法my_URLSession:dataTask:didReceiveData:与delegate的URLSession:dataTask:didReceiveData:进行交换。四、在步骤二中的my_URLSession:dataTask:didReceiveData:方法中,实现对接收到的交换数据进行记录和输出;并在最后需要调用my_URLSession:dataTask:di--dReceiveData:方法达到在交换方法后,能顺利执行原方法URLSession:dataTask:didReceiveData:的代码。通过上述四个步骤,能实现在代理对象delegate接收到响应消息后,记录输出响应地址,响应数据等信息。

以block方法方式接收数据的dataTaskWithRequest:completionHandler:方法进行交换的具体步骤为:一、对NSURLSession类创建分类,在分类中创建并实现my_dataTaskWithRequest:completionHandler:方法;在NSURLSession的load方法中,使用method_exchangeImplementations对原dataTaskWithRequest:completionHandler:与my_dataTaskWithRequest:comple--tionHandler:进行交换;二、在my_dataTaskWithRequest:completionHandler:方法中,添加代码实现对接收到的交换数据进行记录和输出;并在最后需要调用my_dataTaskWithRequest:completionHandler:方法达到在交换方法后,能顺利执行原方法dataTaskWithRequest:completionHandler:的实现代码。通过上述两个步骤,能实现对接收到的交换数据进行记录和输出。

可选的,运行数据为数据交互信息,相应的,监听MQTT发出的发布消息和接收到的订阅消息,并记录监听到的发布消息中的发布信息和订阅消息中的订阅信息,上述MQTT为ISO标准下基于发布或订阅范式的消息协议。其中,记录的发布信息包括发布消息的主题(Topic)和实际数据(payload);记录的订阅信息包括接收的订阅消息的Topic和payload。通过该方法,能方便快捷地获取到MQTT发出的发布消息中的发布信息和订阅消息中的订阅信息。

需要说明的是,对MQTT发出的发布消息和接收到的订阅消息进行监听的方式有两种,分别是:采用预先埋点的方式和无埋点的方式。

其中,采用预先埋点的方式对MQTT发出的发布消息和接收到的订阅消息进行监听的具体步骤为:对MQTT通讯框架进行二次封装,在发布消息前,记录输出发布消息的Topic和payload;在接收到MQTT消息时,从接收消息的方法中记录输出接收消息的Topic和payload。

采用无埋点的方式对MQTT发出的发布消息和接收到的订阅消息进行监听的具体步骤为:利用runtime分别对MQTT发布消息的方法和订阅消息的方法,进行交换,达到注入代码,实现对交互数据进行记录输出。

其中,对发布信息的记录和输出的具体步骤为:一、对MQTT的消息对话类Session添加分类,在分类添加并实现my_publishData:onTopic:方法;二、在MQTT的Session的load方法中,利用method_exchangeImplement--ations对原publishData:onTopic:和my_publishData:onTopic:进行交换,从而实现调用原publishData:onTopic:执行my_publishData:onTopic:的代码,调用my_publishData:onTopic:执行publishData:onTopic:的代码;三、在my_publishData:onTopic:方法中实现对发布信息的Topic和payload进行记录输出;在最后需要调用my_publishData:onTopic:方法达到在交换方法后,能顺利执行原发布消息方法publishData:onTopic:的实现代码。通过上述三个步骤,能实现对MQTT的发布信息的记录和输出。

对订阅消息的记录和输出的具体步骤为:一、对MQTT的消息对话类Session添加分类,在分类添加并实现my_newMessage:data:onTopic:方法;二、对MQTT接收消息的代理对象delegate利用class_addMethod添加新方法及新方法的实现,其新方法名和实现为步骤一中的my_newMessage:data:onTopic:方法;delegate对象添加新方法和实现成功后,利用method_exchangeImplementations,将delegate刚添加的新方法my_newMessage:data:onTopic:与delegate的newMessage:data:onTopic:进行交换;三、在步骤一中的my_newMessage:data:onTopic:方法中,实现对接收到的消息的Topic和payload进行记录输出;并在最后需要调用my_newMessage:data:onTopic:方法达到在交换方法后,能顺利执行原方法newMessage:data:onTopic:的实现代码。需要说明的是,MQTT通讯一般是通过delegate方式接收数据的,在上述步骤中,delegate对象已先实现了newMessage:data:onTopic:方法来处理接收到的数据。通过上述三个步骤,能实现对MQTT的订阅消息的记录和输出。可理解的是,由于对MQTT协议通讯的封装框架校多,其实现方法命名会有不同,所以本申请并未指明具体统一的方法名,而是以publishData:onTopic:代指MQTT的发布消息的方法,以newMessage:data:onTopic:代指MQTT接收消息的方法。

需要说明的是,在程序运行期间,在记录数据交互信息时,可只监听NSURLSession发起的请求信息和接收到的响应信息,并记录监听到的请求信息和响应信息;也可只监听MQTT发出的发布信息和接收到的订阅信息,并记录监听到的发布信息和订阅信息;还可同时对NSURLSession发起的请求信息和接收到的响应信息以及MQTT发出的发布信息和接收到的订阅信息进行监听,并记录记录监听到的请求信息、响应信息、发布信息和订阅信息。

此外,在程序运行期间,在记录程序的数据交互信息和程序调用的方法的名称和调用顺序时,可使用前述记录程序的数据交互信息以及记录程序调用的方法的名称和调用顺序的方法,避免重复,此处不再赘述。

在获取到运行数据之后,本方法可以继续执行步骤S102。

步骤S102:在程序崩溃时,调取程序崩溃前记录的所有运行数据。

在本申请实施例中,在程序崩溃时,调取程序崩溃前记录的所有运行数据,并根据该运行数据帮助开发人员快速修复该崩溃。

需要说明的是,在步骤S101中,记录的运行数据包括数据交互信息和/或调用的方法的名称和调用顺序,因此,在程序崩溃时,调取程序崩溃前记录的所有运行数据有三种情况,分别是:调取程序崩溃前记录的所有数据交互信息;或,调取程序崩溃前记录的所有方法的名称和调用顺序;或,调取程序崩溃前记录的所有数据交互信息以及所有方法的名称和调用顺序。

其中,数据交互信息通过对通信数据进行实时抓取和记录,展示了程序的数据交互逻辑,从而帮助开发人员定位崩溃发生的位置;通过记录程序运行期间调用的所有方法名称以及所有方法的调用顺序,从而帮助开发人员快速定位到崩溃发生的位置,进而帮助开发人员快速解决该崩溃。

此外,在崩溃发生时,还可采取一些方法获取该崩溃的相关信息。

具体的,在程序崩溃时,对程序的当前运行界面进行截图,并保存截图。通过该方式,能通过保存的截图看出该崩溃发生在哪个界面,以使开发人员根据截图快速定位到该崩溃发生的位置,从而帮助开发人员快速解决该崩溃。

可选的,将截图按截图时间进行命名并保存。通过该方式,能帮助开发人员能按崩溃发生的时间顺序识别出对应的截图,进而帮助开发人员更快地修复该崩溃。

可选的,在程序崩溃时,通过预设的异常处理函数获取程序崩溃的崩溃信息,崩溃信息包括崩溃的类型、原因和调用堆栈信息。

具体的,应用层面的程序异常可利用NSSetUncaughtExceptionHandler添加预设的异常处理函数,使在程序发生崩溃时,在该异常处理函数中监听捕获崩溃的类型、原因和调用堆栈信息。Mach异常可注册signal进行捕获,通过signal()函数注册对SIGABRT、SIGBUS、SIGSEGV等信号的异常处理函数对信息进行捕获,使在程序发生崩溃时,在该异常处理函数中监听捕获崩溃的类型、原因和调用堆栈信息。

通过上述方式,能在程序崩溃时,通过预设的异常处理函数获取程序崩溃的类型、原因和调用堆栈信息,从而能帮助开发人员更快速地修复问题。

需要说明的是,上述英文均为本领域技术人员熟知的专业名称,此处不进行说明。

请参阅图2,基于同一发明构思,本申请实施例还提供一种程序崩溃信息的获取装置100,该装置100包括:处理模块101和获取模块102。

处理模块101,用于在程序运行期间,记录所述程序的运行数据,所述运行数据包括所述程序的数据交互信息和/或所述程序调用的方法的名称和调用顺序。

获取模块102,用于在程序崩溃时,调取程序崩溃前记录的所有运行数据。

可选的,运行数据为程序调用的方法的名称和调用顺序,处理模块101具体用于当程序调用方法时,执行预设追踪方法记录方法的名称以及方法被调用的顺序。

可选的,运行数据为数据交互信息,处理模块101具体用于监听NSURLSession发起的网络请求和接收到的响应消息,并记录监听到的网络请求中的请求信息和响应消息中的响应信息,上述NSURLSession为用于处理基于HTTP/HTTPS请求的类。

可选的,运行数据为数据交互信息,处理模块101具体用于监听MQTT发出的发布消息和接收到的订阅消息,并记录监听到的发布消息中的发布信息和订阅消息中的订阅信息,上述MQTT为ISO标准下基于发布或订阅范式的消息协议。

可选的,获取模块102还用于在程序崩溃时,对程序的当前运行界面进行截图,并保存截图。

可选的,获取模块102具体用于将截图按截图时间进行命名并保存。

可选的,获取模块102还用于在程序崩溃时,通过预设的异常处理函数获取程序崩溃的崩溃信息,崩溃信息包括崩溃的类型、原因和调用堆栈信息。

请参阅图3,基于同一发明构思,本申请实施例提供的一种电子设备200的示意性结构框图,该电子设备200用于上述的一种程序崩溃信息的获取方法。本申请实施例中,电子设备200可以是,但不限于个人计算机(Personal Computer,PC)、智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)、移动上网设备(Mobile InternetDevice,MID)等。在结构上,电子设备200可以包括处理器210和存储器220。

处理器210与存储器220直接或间接地电性连接,以实现数据的传输或交互,例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。其中,处理器210可以是一种集成电路芯片,具有信号处理能力。处理器210也可以是通用处理器,例如,可以是中央处理器(Central Processing Unit,CPU)、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、分立门或晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。此外,通用处理器可以是微处理器或者任何常规处理器等。

存储器220可以是,但不限于,随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-OnlyMemory,PROM)、可擦可编程序只读存储器(Erasable Programmable Read-Only Memory,EPROM),以及电可擦编程只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)。存储器220用于存储程序,处理器210在接收到执行指令后,执行该程序。

应当理解,图3所示的结构仅为示意,本申请实施例提供的电子设备200还可以具有比图3更少或更多的组件,或是具有与图3所示不同的配置。此外,图3所示的各组件可以通过软件、硬件或其组合实现。

需要说明的是,由于所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

基于同一发明构思,本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序在被运行时执行上述实施例中提供的方法。

该存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120113792922