信号监听方法、装置、计算机设备和存储介质
技术领域
本公开涉及信息处理技术领域,具体而言,涉及一种信号监听方法、装置、计算机设备和存储介质。
背景技术
在页面渲染过程中,需要依赖于平台(如安卓平台或苹果平台)的底层驱动信号来驱动页面的渲染,在底层驱动信号到来之前,用户界面(User Interface,UI)线程发送一个任务到信号注册线程,然后由信号注册线程向系统注册信号,信号注册线程可以是主线程,也可以为单独的信号注册线程。
当底层驱动信号到来的时候,信号注册线程会收到底层驱动信号,然后再通过消息传递机制将该底层驱动信号交给UI线程,UI线程在等待调度后才开始执行,导致驱动信号的获取效率比较低。
发明内容
本公开实施例至少提供一种信号监听方法、装置、计算机设备和存储介质,以提高了驱动层信号的获取效率,同时实现在同一个UI线程中同时监听驱动层的信号和UI框架引擎层的信号。
第一方面,本公开实施例提供了一种信号监听方法,所述方法包括:
在初始化目标用户界面UI线程之前,为所述目标UI线程创建第一语言信号检测对象,所述第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号;
在初始化所述目标UI线程时,为所述目标UI线程创建第二语言信号检测对象,所述第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号;
通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
在一种实施方式中,所述方法还包括:
响应页面刷新操作,基于所述第二语言信号循环检测机制,注册驱动层的垂直同步信号;所述垂直同步信号用于触发UI线程对页面的绘制;
若通过所述目标UI线程检测到所述垂直同步信号,则通过所述目标UI线程绘制所述页面。
在一种实施方式中,为所述目标UI线程创建第一语言信号检测对象,包括:
通过第一语言层本地接口调用第一语言信号检测对象实例化方法,为所述目标UI线程创建所述第一语言信号检测对象。
在一种实施方式中,通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号,包括:
调用第一语言信号检测对象中的启动方法,启动所述目标UI线程;
通过启动的目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
在一种实施方式中,还包括:
响应页面退出操作,调用所述第一语言信号检测对象中的退出方法,停止所述第一语言信号检测对象和所述第二语言信号检测对象对信号的检测。
在一种实施方式中,所述为所述目标UI线程创建第一语言信号检测对象,包括:
创建包括第一语言信号循环检测机制和第二语言信号循环检测机制的第一语言信号检测对象;
为所述目标UI线程创建第二语言信号检测对象,包括:
调用所述第二语言信号循环检测机制,以创建包括第二语言信号循环检测机制的所述第二语言信号检测对象。
在一种实施方式中,所述第一语言为Java语言,所述第二语言为C++语言。
第二方面,本公开实施例提供了一种信号监听装置,所述装置包括:
第一创建模块,用于在初始化目标用户界面UI线程之前,为所述目标UI线程创建第一语言信号检测对象,所述第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号;
第二创建模块,用于在初始化所述目标UI线程时,为所述目标UI线程创建第二语言信号检测对象,所述第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号;
监听模块,用于通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
在一种实施方式中,还包括:注册模块和绘制模块,所述注册模块用于:
响应页面刷新操作,基于所述第二语言信号循环检测机制,注册驱动层的垂直同步信号;所述垂直同步信号用于触发UI线程对页面的绘制;
绘制模块,用于若通过所述目标UI线程检测到所述垂直同步信号,则通过所述目标UI线程绘制所述页面。
在一种实施方式中,第一创建模块用于根据以下步骤为所述目标UI线程创建第一语言信号检测对象:
通过第一语言层本地接口调用第一语言信号检测对象实例化方法,为所述目标UI线程创建所述第一语言信号检测对象。
在一种实施方式中,所述监听模块用于根据以下步骤控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号:
调用第一语言信号检测对象中的启动方法,启动所述目标UI线程;
通过启动的目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和UI框架引擎层的信号。
在一种实施方式中,还包括:停止模块,所述停止模块用于:
响应页面退出操作,调用所述第一语言信号检测对象中的退出方法,停止所述第一语言信号检测对象和所述第二语言信号检测对象对信号的检测。
在一种实施方式中,所述第一创建模块用于根据以下步骤为所述目标UI线程创建第一语言信号检测对象:
创建包括第一语言信号循环检测机制和第二语言信号循环检测机制的第一语言信号检测对象;
所述第二创建模块用于根据以下步骤为所述目标UI线程创建第二语言信号检测对象:
调用所述第二语言信号循环检测机制,以创建包括第二语言信号循环检测机制的所述第二语言信号检测对象。
在一种实施方式中,所述第一语言为Java语言,所述第二语言为C++语言。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述任一方面,或任一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述任一方面,或任一方面中任一种可能的实施方式中的步骤。
本公开实施例提供了一种信号监听方法,在初始化目标UI线程之前,为目标UI线程创建第一语言信号检测对象,该第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号,并在初始化目标UI线程时,为目标UI线程创建第二语言信号检测对象,第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号,通过目标UI线程,控制第一语言信号检测对象和第二语言信号检测对象,同步监听驱动层的信号和UI框架引擎层的信号,这样,可以避免跨线程获取驱动层的信号,提高驱动层信号的获取效率,同时,在同一个UI线程中实现同时监听两个信号检测对象分别获取的信号。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种信号监听方法的流程示意图;
图2示出了本公开实施例所提供的一种跨线程监听信号的示意图;
图3示出了本公开实施例所提供的一种信号监听装置的第一种结构示意图;
图4示出了本公开实施例所提供的一种信号监听装置的第二种结构示意图;
图5示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
终端设备在进行页面渲染过程中,需要通过平台(如安卓平台或苹果平台)驱动层的垂直同步(Vertical Synchronization,VSync)信号触发页面的渲染,VSync信号是硬件驱动层驱动产生的,比如,对于刷新率(Frame Per Second,FPS)为60的终端设备,每隔16.7ms,驱动层就会触发一个VSync信号,VSync信号用于触发UI线程进行页面的渲染。
终端设备可以利用移动用户界面框架(Flutter)技术创建UI线程,当Flutter创建的UI线程接收到VSync信号后,开始进行页面绘制,若UI线程每绘制一帧页面的时长不超过16.7ms,则页面比较流畅。但是,VSync信号的调度需要跨线程通信,调度链路比较长(调度链路可以参考图1),导致UI线程接收到VSync信号的时间会比较长,而在保障页面不卡顿的前提下,接收到VSync信号的时长变长后,UI线程绘制页面的有效时长会变短,从而会导致页面的流畅度变差。
基于上述研究,本公开实施例提供了一种信号监听方法,在初始化目标UI线程之前,为目标UI线程创建第一语言信号检测对象,该第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号,并在初始化目标UI线程时,为目标UI线程创建第二语言信号检测对象,第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号,通过目标UI线程,控制第一语言信号检测对象和第二语言信号检测对象,同步监听驱动层的信号和UI框架引擎层的信号,这样,可以避免跨线程获取驱动层的信号,提高驱动层信号的获取效率,同时,在同一个UI线程中实现同时监听两个信号检测对象分别获取的信号。
需要说明的是,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人对本公开做出的贡献。
下面将结合本公开中附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种信号监听方法进行详细介绍,本公开实施例所提供的信号监听方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、蜂窝电话、无绳电话、个人数字处理(PersonalDigital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该信号监听方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为终端设备为例对本公开实施例提供的信号监听方法加以说明。
参见图2所示,为本公开实施例提供的信号监听方法的流程图,具体包括以下步骤:
S201,在初始化目标用户界面UI线程之前,为所述目标UI线程创建第一语言信号检测对象,所述第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号。
S202,在初始化所述目标UI线程时,为所述目标UI线程创建第二语言信号检测对象,所述第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号。
S203,通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
本公开涉及的第一语言一般为基于平台的语言,平台可以为安卓平台、iOS平台或鸿蒙OS平台等,比如,在安卓平台或鸿蒙OS平台中第一语言为Java语言,在苹果平台中第一语言为C++语言。
本公开涉及的第二语言一般为基于UI框架引擎的语言,第二语言可以为C++语言。
以本公开应用于安卓平台为例对本公开进行说明。
第一语言信号检测对象可以为Java信号检测对象,在具体实现中可以为JavaLooper,第一语言信号循环检测机制能够用于循环检测安卓平台驱动层的信号,也就是,循环检测安卓平台硬件驱动层产生的信号。
第二语言信号检测对象可以为C++信号检测对象,在具体实现中可以为C++Looper,第二语言信号循环检测机制能够用于循环检测UI框架引擎层的信号。
在通常情况下,一个应用层的线程中是不存在驱动层的信号循环检测机制的,为了使得UI线程可以循环检测驱动层的信号,需要在UI线程中的创建信号检测对象,因此,在UI线程创建后、初始化之前,需要调用驱动层的静态方法实现对Java Looper的创建。
为目标UI线程创建第一语言信号检测对象,可以通过第一语言层本地接口调用第一语言信号检测对象实例化方法,在目标UI线程中创建第一语言信号检测对象,即,在目标UI线程中,创建包括第一语言信号循环检测机制和第二语言信号循环检测机制的第一语言信号检测对象。其中,第二语言为基于UI框架引擎的语言,可以为C++语言。
其中,第一语言层本地接口为Java Native Interface,又称为JNI接口,JNI接口为Java提供的、方便其它语言的程序进行调用的接口,可以确保Java代码在不同的平台上进行移植;第一语言信号检测对象实例化方法为Looper.prepare()方法。
具体地,目标UI线程通过JNI接口调用驱动层提供的Looper.prepare()方法,实现在目标UI线程中创建Java Looper,Java Looper可以是在目标UI线程的Java层(也称Java空间)中创建的。
目标UI线程在创建Java信号检测对象时,该Java信号检测对象中包括Java信号循环检测机制和C++信号循环检测机制。其中,在Java信号循环检测机制启动时,UI线程可以获取驱动层的信号,在C++信号循环检测机制启动时,UI线程可以获取UI框架引擎层的信号。
在目标UI线程中创建第一语言信号检测对象后,对目标UI线程进行初始化,在执行S202时,为目标UI线程创建第二语言(即C++语言)信号检测对象,即,C++信号检测对象,也即,C++Looper。
C++Looper可以是在UI线程的C++层(也称C++空间)创建的,在创建C++Looper时,UI线程首先检测自身是否存在Java Looper,若自身存在Java Looper,UI线程会调用JavaLooper中的C++信号循环检测机制,也就是,复用Java Looper中的C++信号循环检测机制,以实现对C++Looper的创建。这样,可以避免在一个UI线程中创建两个对象出现异常冲突。
为目标UI线程创建第二语言信号检测对象,包括:调用第二语言信号循环检测机制,以创建包括第二语言信号循环检测机制的第二语言信号检测对象,也就是,目标UI线程调用C++信号循环检测机制,创建包括C++信号循环检测机制的C++Looper。
在创建第一语言信号检测对象和第二语言信号检测对象后,若期望通过UI线程同步监听第一语言信号检测对象和第二语言信号检测对象检测到的信号,需要启动UI线程,那么,在启动UI线程时,若仅通过C++Looper的启动方法启动UI线程,就无法启动Java信号循环检测机制,因此,需要在通过Java Looper的启动方法启动目标UI线程,即,调用第一语言信号检测对象中的启动方法,启动目标UI线程,在具体实现中,调用Java信号检测对象中的loop(),启动UI线程。
在目标UI线程启动后,目标UI线程中同时运行第一语言信号循环检测机制和第二语言信号循环检测机制,也就是,通过启动的目标UI线程,控制第一语言信号检测对象和第二语言信号检测对象,同步监听驱动层的信号和UI框架引擎层的信号。这样,通过同一个UI线程同步监听驱动层的信号和UI框架引擎层的信号,可以保证UI线程对页面进行绘制的前提下,实现在UI线程中监听驱动层的信号,减少UI线程获取驱动层的信号的获取时长,也提高了页面的绘制效率。
目标UI线程应用于页面渲染场景中时,考虑到页面渲染场景中驱动层每隔预设时长产生垂直同步(VSync)信号,在页面不发生卡顿的前提下,目标UI线程可以每隔预设预设时长(如16.7ms)注册一次VSync信号,当页面发生卡顿时,目标UI线程可以根据页面的变化,进行VSync信号的注册,比如,绘制第一帧页面耗时20ms(大于16.7ms),那么,在16.7*2=33.4ms时对VSync信号进行注册。
用户在终端设备中的页面中执行滑动操作或者页面切换操作时,为了实现对驱动层产生的垂直同步信号的检测,目标UI线程基于第二语言信号循环检测机制,注册垂直同步信号,即,响应页面刷新操作,基于第二语言信号循环检测机制,向驱动层注册垂直同步信号,若通过目标UI线程中的第一语言信号检测对象检测到垂直同步信号后,则通过目标UI线程绘制页面,也就是,在通过目标UI线程中的Java信号循环检测机制检测到VSync信号后,目标UI线程开始绘制页面。
具体地,目标UI线程通过JNI接口调用Java Looper中的Java信号循环检测机制向驱动层注册VSync信号,目标UI线程基于Java信号循环检测机制循环检测驱动层产生的VSync信号,当目标UI线程检测到VSync信号后,目标UI线程开始绘制页面。
利用本公开的方案在安卓平台进行页面渲染时,若绘制336帧页面,VSync信号获取总耗时为405.38ms,平均每帧页面的VSync信号获取耗时为1.2ms,而跨线程获取VSync信号时,绘制315页面,VSync信号获取总耗时为681.48ms,平均每帧页面的VSync信号获取耗时为2.16ms,VSync信号的获取耗时从2.16ms下降到1.2ms,对于刷新率为60的终端设备而言,在不卡顿的前提下,绘制每一帧页面的最长耗时为16.7ms,这样,绘制每一帧页面的耗时就会节省1ms,相当于绘制效率提高了6%。
当用户退出当前浏览页面时,可以基于Flutter框架引擎层的设置信息,确定是否对UI线程进行析构,若Flutter框架引擎层允许在页面退出时析构UI线程,可以调用UI线程中的停止方法停止UI线程中信号检测对象对信号的检测,实现对UI线程的回收,即,响应页面退出操作,调用所述第一语言信号检测对象中的退出方法,停止所述第一语言信号检测对象和所述第二语言信号检测对象对信号的检测。
这里,页面退出操作可以为用户针对页面中的返回按钮执行的点击操作或者触控操作;在Java信号循环检测对象中,退出方法可以为quit方法。
具体地,考虑到目标UI线程通过创建Java信号循环检测对象实现对驱动层信号的检测,因此,在析构目标UI线程时,需要调用Java信号循环检测对象中的退出方法,以停止第一语言信号检测对象和第二语言信号检测对象对信号的检测,也就是,调用Java Looper中的quit方法,停止Java Looper对驱动层信号的检测,以及停止C++Looper对UI框架引擎层的信号的检测。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与信号监听方法对应的信号监听装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述信号监听方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参考图3,本公开实施例提供了一种信号监听装置的示意图,所述装置包括:
第一创建模块31,用于在初始化目标用户界面UI线程之前,为所述目标UI线程创建第一语言信号检测对象,所述第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号;
第二创建模块32,用于在初始化所述目标UI线程时,为所述目标UI线程创建第二语言信号检测对象,所述第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号;
监听模块33,用于通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
在一种实施方式中,第一创建模块31用于根据以下步骤为所述目标UI线程创建第一语言信号检测对象:
通过第一语言层本地接口调用第一语言信号检测对象实例化方法,为所述目标UI线程创建所述第一语言信号检测对象。
在一种实施方式中,所述监听模块33用于根据以下步骤控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和UI框架引擎层的信号:
调用第一语言信号检测对象中的启动方法,启动所述目标UI线程;
通过启动的目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
在一种实施方式中,所述第一创建模块31用于根据以下步骤为所述目标UI线程创建第一语言信号检测对象:
创建包括第一语言信号循环检测机制和第二语言信号循环检测机制的第一语言信号检测对象;
所述第二创建模块32用于根据以下步骤为所述目标UI线程创建第二语言信号检测对象:
调用所述第二语言信号循环检测机制,以创建包括第二语言信号循环检测机制的所述第二语言信号检测对象。
在一种实施方式中,所述第一语言为Java语言,所述第二语言为C++语言。
本公开实施例提供了另一种信号监听装置,如图4所示,该装置与图3中的装置相比包括:注册模块34、绘制模块35和停止模块36。
所述注册模块34用于:
响应页面刷新操作,基于所述第二语言信号循环检测机制,注册驱动层的垂直同步信号;所述垂直同步信号用于触发UI线程对页面的绘制;
绘制模块35,用于若通过所述目标UI线程检测到所述垂直同步信号,则通过所述目标UI线程绘制所述页面。
所述停止模块36用于:
响应页面退出操作,调用所述第一语言信号检测对象中的退出方法,停止所述第一语言信号检测对象和所述第二语言信号检测对象对信号的检测。
对应于图1中的信号监听方法,本公开实施例还提供了一种计算机设备50,如图5所示,为本公开实施例提供的计算机设备50结构示意图,包括:
处理器51、存储器52、和总线53;存储器52用于存储执行指令,包括内存521和外部存储器522;这里的内存521也称内存储器,用于暂时存放处理器51中的运算数据,以及与硬盘等外部存储器522交换的数据,处理器51通过内存521与外部存储器522进行数据交换,当所述计算机设备50运行时,所述处理器51与所述存储器52之间通过总线53通信,使得所述处理器51在用户态执行以下指令:
在初始化目标用户界面UI线程之前,为所述目标UI线程创建第一语言信号检测对象,所述第一语言信号检测对象用于基于第一语言信号循环检测机制,循环检测驱动层的信号;
在初始化所述目标UI线程时,为所述目标UI线程创建第二语言信号检测对象,所述第二语言信号检测对象用于基于第二语言信号循环检测机制,循环检测UI框架引擎层的信号;
通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号。
一种可能的实施方式中,处理器51执行的指令中,还包括:
响应页面刷新操作,基于所述第二语言信号循环检测机制,注册驱动层的垂直同步信号;所述垂直同步信号用于触发UI线程对页面的绘制;
若通过所述目标UI线程检测到所述垂直同步信号,则通过所述目标UI线程绘制所述页面。
一种可能的实施方式中,处理器51执行的指令中,为所述目标UI线程创建第一语言信号检测对象,包括:
通过第一语言层本地接口调用第一语言信号检测对象实例化方法,为所述目标UI线程创建所述第一语言信号检测对象。
一种可能的实施方式中,处理器51执行的指令中,通过所述目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和所述UI框架引擎层的信号,包括:
调用第一语言信号检测对象中的启动方法,启动所述目标UI线程;
通过启动的目标UI线程,控制所述第一语言信号检测对象和第二语言信号检测对象,同步监听所述驱动层的信号和UI框架引擎层的信号。
一种可能的实施方式中,处理器51执行的指令中,还包括:
响应页面退出操作,调用所述第一语言信号检测对象中的退出方法,停止所述第一语言信号检测对象和所述第二语言信号检测对象对信号的检测。
一种可能的实施方式中,处理器51执行的指令中,所述为所述目标UI线程创建第一语言信号检测对象,包括:
创建包括第一语言信号循环检测机制和第二语言信号循环检测机制的第一语言信号检测对象;
为所述目标UI线程创建第二语言信号检测对象,包括:
调用所述第二语言信号循环检测机制,以创建包括第二语言信号循环检测机制的所述第二语言信号检测对象。
一种可能的实施方式中,处理器51执行的指令中,所述第一语言为Java语言,所述第二语言为C++语言。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的信号监听方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的信号监听方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的信号监听方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。