CN105487934A - 安卓系统的触屏消息处理方法及系统 - Google Patents
安卓系统的触屏消息处理方法及系统 Download PDFInfo
- Publication number
- CN105487934A CN105487934A CN201510855511.6A CN201510855511A CN105487934A CN 105487934 A CN105487934 A CN 105487934A CN 201510855511 A CN201510855511 A CN 201510855511A CN 105487934 A CN105487934 A CN 105487934A
- Authority
- CN
- China
- Prior art keywords
- touch screen
- screen message
- activity
- message
- android system
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Abstract
本发明提供的安卓系统的触屏消息处理方法及系统,至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性;当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理,当前处于Focus的Activity不进行触屏消息处理时,其它Activity能够接收和处理触屏消息,实现起来清晰、简单、及高效。
Description
技术领域
本发明涉及移动终端技术领域,特别是涉及安卓系统的触屏消息处理方法及系统。
背景技术
Android系统中,系统进程中的WindowManagerService组件负责触屏消息的监控和派发,系统初始化后,WindowManagerService组件会创建两个线程InputReaderThread和InputDispatcherThread,InputReaderThread线程负责监控底层驱动的触屏消息,InputDispatcherThread线程负责派发触屏消息到应用层。为了将触屏消息派发到Activity,创建Activity时,需要创建一对InputChannel管道,即ServerInputChannel和ClientInputChannel,系统进程的InputDispatcherThread线程负责管理ServerInputChannel管道,Activity所在应用的主线程负责管理ClientInputChannel管道。当有触屏消息触发时,InputDispatcherThread线程找到当前处于Focus(获得焦点,也就是处于Activity栈顶部正在使用的意思)的Activity,从中取出其对应的ServerInputChannel,向ServerInputChannel管道中写入触屏消息,之后系统会唤醒ServerInputChannel对应ClientInputChannel的应用主线程,应用主线程运行后,从ClientInputChanel中取出触屏消息,派发给具体的Activity进行处理。Activity提供了FLAG_NOT_TOUCHABLE属性设置,该属性只是能让当前FocusActivity接收不到触屏消息,却无法使得其他Activity进行触屏消息处理。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供安卓系统的触屏消息处理方法及系统,用于解决现有技术中未获得焦点的Activity的不能处理触屏消息的问题。
为实现上述目的及其他相关目的,本发明提供一种安卓系统的触屏消息处理方法,包括:至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性;当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述的安卓系统的触屏消息处理方法,包括:当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述第一属性的检测是通过安卓系统中的系统进程创建的第一线程来控制的,所述触屏消息的派发是通过安卓系统中的系统进程创建的第二线程来控制实现的。
于本发明的一实施例中,所述第二线程通过控制安卓系统中的InputDispatcher组件来实现所述派发。
于本发明的一实施例中,所述消息通道包括:成对的第一通道及第二通道;所述第一通道用于接收所述触屏消息;所述第二通道用于与应用进程通信以传输所述触屏消息。
为实现上述目的及其他相关目的,本发明提供一种安卓系统的触屏消息处理系统,包括:设置模块,用于对当前获取焦点的第一Activity设置用于放弃处理触屏消息的第一属性;检测模块,用于当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;处理模块,用于派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述检测模块,还用于当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,通过所述处理模块派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述检测模块是通过安卓系统中的系统进程创建的第一线程来实现的,所述处理模块是通过安卓系统中的系统进程创建的第二线程来实现的。
于本发明的一实施例中,所述第二线程通过控制安卓系统中的InputDispatcher组件来实现所述处理模块的功能。
于本发明的一实施例中,所述消息通道包括:成对的第一通道及第二通道;所述第一通道用于接收所述触屏消息;所述第二通道用于与应用进程通信以传输所述触屏消息。
如上所述,本发明提供的安卓系统的触屏消息处理方法及系统,至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性;当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理,当前处于Focus的Activity不进行触屏消息处理时,其它Activity能够接收和处理触屏消息,实现起来清晰、简单、及高效。
附图说明
图1显示为本发明于一实施例中的安卓系统的触屏消息处理方法的流程示意图。
图2显示为本发明于一实施例中的处理触屏消息的具体实现的流程示意图。
图3显示为本发明于一实施例中的实现触屏消息派发的具体实现的流程示意图。
图4显示为本发明于一实施例中的安卓系统的触屏消息处理系统的结构示意图。
元件标号说明
1系统
11设置模块
12检测模块
13处理模块
S1~S3步骤
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
本发明的技术方案应用于安卓(Android)操作系统,而可应用于使用安卓(Android)操作系统的移动终端,例如手机或平板电脑上。
请参阅图1,本发明提供一种安卓系统的触屏消息处理方法,包括:
步骤S1:至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性。
步骤S2:当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;所述确保指的是可以是预先已设有的(例如建立时),若检测到没有设置,则可加以设置。
步骤S3:派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述的安卓系统的触屏消息处理方法,还包括:当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
具体来说明以上内容的实现,在Android系统中,系统会将触屏消息发送给当前处于Focus的Activity进行处理,本发明为了实现非Focus的Activity接收和处理触屏消息,处于Focus的Activity需要通过设置新增加的FLAG_DISMISS_TOUCH_EVENT属性(即第一属性)来放弃对于触屏消息的处理,通过取消FLAG_DISMISS_TOUCH_EVENT属性重新获得对于触屏消息的处理。设置FLAG_DISMISS_TOUCH_EVENT属性时,当系统进程的WindowManagerService组件收到FLAG_DISMISS_TOUCH_EVENT属性设置后,获取当前FocusActivity之前的Activity组件,并获取其中的InputWindowHandle成员,确保其已经设置好了接收触屏消息的消息通道InputChannel,然后通过JNI接口通知C++层的InputDispatcher组件,InputDispatcher收到FLAG_DISMISS_TOUCH_EVENT属性设置和需要接收和处理触屏消息的Activity对应的InputWindowHandle后,保存其InputWindowHandle。当驱动层有触屏消息发送过来时,InputDispatcher读取当前设置的非Focus的Activity对应的InputWindowHandle,然后将触屏消息通过其InputChannel发送到应用层面的InputQueue.java中的DispatchMotionEvent函数进行触屏消息的处理。
反之,当取消FLAG_DISMISS_TOUCH_EVENT属性设置时,C++层的InputDispatcher组件则会删除之前设置的非Focus的Activity对应的InputWindowHandle,当驱动层有触屏消息发送过来时,直接获取FocusActivity对应的InputWindowHandle,然后将触屏消息通过其InputChannel发送到应用层面的InputQueue.java中的DispatchMotionEvent函数进行触屏消息的处理;只要Focus的Activity设置了FLAG_DISMISS_TOUCH_EVENT属性,则之前的非Focus的Activity就可以接收和处理触屏消息了,当Focus的Activity取消FLAG_DISMISS_TOUCH_EVENT属性设置后,则Focus的Activity可以重新接收和处理触屏消息。
于本发明的一实施例中,所述第一属性的检测是通过安卓系统中的系统进程创建的第一线程来控制的,所述触屏消息的派发是通过安卓系统中的系统进程创建的第二线程来控制实现的。
具体的,Android系统中,系统进程的InputReaderThread线程(即第一线程)负责监控驱动层的触屏消息,当有触屏消息产生时,将消息转交给系统进程的InputDispatcherThread线程(即第二线程)进行派发,具体的派发工作由所述C++层的InputDispatcher组件完成。由于触屏消息需要派发到应用进程进行处理,所以在创建新的Activity时,需要创建一对InputChannel(ServerInputChannel(即第一通道)和ClientInputChannel(第二通道)),作为进程间通信的管道机制的两端,ServerInputChannel作为Activity的InputWindowHandle的成员配置到C++层的InputDispatcher组件中(InputDispatcher组件运行于系统进程的InputDispatcherThread线程中,专门用于触屏消息的派发),ClientInputChannel作为Activity的接收端,承载于Activity所在进程的主线程中,这样就构建了系统进程与应用进程间的通信管道。当有触屏消息需要派发时,InputDispatcher组件首先获取当前处于Focus的Activity的InputWindowHandle,取出其中的成员ServerInputChannel,即服务端的管道,向ServerInputChannel管道中写入触屏消息后,由于ServerInputChannel和ClientInputChannel是成对的,底层系统监测到ServerInputChannel管道中写入内容后,即会唤醒ClientInputChannel管道对应的线程,即Activity所在进程的主线程被唤醒,从ClientInputChannel中读取触屏消息,派发给对应的Activity进行处理。
以上是本发明在Android系统设计的触屏消息的技术方案,基于此原理,以下说明本技术方案中几个重要部分是如何实现的:FLAG_DISMISS_TOUCH_EVENT属性设置、FLAG_DISMISS_TOUCH_EVENT属性取消设置、InputDispatcher中触屏消息派发。具体描述如下:
A.关于FLAG_DISMISS_TOUCH_EVENT属性设置:
FLAG_DISMISS_TOUCH_EVENT属性在Activity中设置,作为Activity中的一个属性,Activity属性定义在WindowManager.java中,在WindowManager.java中定义新增加的FLAG_DISMISS_TOUCH_EVENT属性例如以下所示:
publicstaticfinalintFLAG_DISMISS_TOUCH_EVENT=0x80000000;
当Activity在处于Focus的情况下,主动放弃触屏消息的处理,栈中的前一个Activity在没有处于Foucs的情况下,可以接收到所有的触屏消息;此时Activity就可以设置FLAG_DISMISS_TOUCH_EVENT属性,需要在Activity.java中新增FLAG_DISMISS_TOUCH_EVENT属性设置函数:
publicvoiddismissTouchEvent(){
Windowwin=getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_TOUCH_EVENT);
}
这里首先获得Activity对应的Window实例,然后调用Window实例中的addFlags函数将FLAG_DISMISS_TOUCH_EVENT设置到系统中。由于Activity的属性功能都是在系统进程中的WindowManagerService组件中实现,最终会将属性变化更新到WindowManagerService中,即会调用WindowManagerService的relayoutWindow函数来完成WindowManagerService组件中的属性更新,为了实现FLAG_DISMISS_TOUCH_EVENT属性功能,需要在WindowManagerService的relayoutWindow函数中对FLAG_DISMISS_TOUCH_EVENT属性进行处理,首先在Activity的属性参数中匹配FLAG_DISMISS_TOUCH_EVENT属性,确定设置了FLAG_DISMISS_TOUCH_EVENT属性后,从WindowManagerService的成员ArrayList<WindowState>mWindows数组中取出第二个WindowState实例,mWindows数组中的第一个WindowState实例是当前FocusActivity所对应的,数组中的第二个WindowState实例即对应FocusActivity的前一个Activity,接下来从WindowState实例中取出InputWindowHandle和mInputWindowHandle成员(用于输入窗口控制的组件),然后调用InputDispatcher.cpp组件中新增加的函数setHandleTouchEventInputWindow将mInputWindowHandle设置到InputDispatcher组件中。
InputDispatcher.cpp中的setHandleTouchEventInputWindow函数(可理解为设置处理触屏消息输入窗口函数)处理流程如图2及以下所示:
11)将Java参数InputWindowHandleiwh转换成C++数据;
具体的,该步骤的目的在于:由于setHandleTouchEventInputWindow函数是在Java层的WindowManagerService.java中调用,中间经过了Java虚拟机的JNI接口,所以需要调用JNI函数将参数转换成C++层能够识别和处理的数据格式。
12)循环匹配InputDispatcher中的mWindowHandles向量;
具体的,该步骤的目的在于:InputDispatcher中的成员Vector<sp<InputWindowHandle>>mWindowHandles标识了所有已经打开的Activity对应的InputWindowHandle,标识这些Activity具有接收触屏消息的能力。
13)mWindowHandles向量是否包含了传递参数iwh?,若否,则不作处理跳出,表示上层配置的InputWindowHandle不具有处理触屏消息的能力,此次配置失败;若是,则进行下一步;
具体的,该步骤的目的在于:需要检查上层配置的InputWindowHandle已经位于mWindowHandles表中,只有位于mWindowHandles表中的InputWindowHandle才具有接收触屏消息的能力。
l4)设置成员boolmHandleTouchEnable为true;
具体的,该步骤的目的在于:在InputDispatcher.cpp新定义成员boolmHandleTouchEnable,标识Java层是否配置了InputWindowHandle下来,如果为true,则使用配置的InputWindowHandle进行触屏消息处理,否则使用当前Focus的Activity对应InputWindowHandle处理触屏消息。
15)设置成员mHandleTouchWinow为传递参数iwh;
具体的,该步骤的目的在于:在InputDispatcher.cpp新定义成员sp<InputWindowHandle>mHandleTouchWindow,当上面定义的成员mHandleTouchEnable为ture时,则使用mHandleTouchWindow处理触屏消息。
16)调用resetTargetsLocked函数进行目标更新;
具体的,该步骤的目的在于:InputDispatcher.cpp中的resetTargetsLocked函数,会设置重新获取目标InputWindowHandle的标志,当有触屏消息需要派发时,会更新目标InputWindowHandle。
简述上述流程的原理,InputDispatcher.cpp中新增了成员boolmHandleTouchEnable和sp<InputWindowHandl>mHandleTouchWindow。mHandleTouchEnable用来标识上层是否配置了接收触屏消息的InputWindowHandle,mHandleTouchWindow则标识具体配置的InputWindowHandle,如果没有配置,则将触屏消息派发给当前处于FocusActivity对应的InputWindowHandle,如果配置了,则将触屏消息派发给已经配置的mHandleTouchWindow进行处理。在配置完成后,需要调用resetTargetsLocked函数,该函数将InputDispatcher.cpp中的成员mCurrentInputTargetValid标志置为false,同时清空mCurrentInputTargets,mCurrentInputTargets标识当前处理触屏消息的InputWindowHandle。当有触屏消息派发时,首先会检查mCurrentInputTargetValid标志是否为false,一旦为false,则需要重新配置mCurrentInputTargets,mCurrentInputTargets一般配置为当前FocusActivity对应的InputWindowHandle,在这里需要判断前面新增加的成员mHandleTouchEnable,如果为true,则配置mHandleTouchWindow作为处理触屏消息的InputWindowHandle,只有当mHandleTouchEnable为false时,才配置当前FocusActivity对应的InputWindowHandle作为处理触屏消息的InputWindowHandle。
B.关于FLAG_DISMISS_TOUCH_EVENT属性取消设置:
取消FLAG_DISMISS_TOUCH_EVENT属性设置的流程与FLAG_DISMISS_TOUCH_EVENT属性设置的流程基本一致,需要在Activity.java中增加取消属性设置函数:
publicvoidunDismissTouchEvent(){
Windowwin=getWindow();
win.clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_TOUCH_EVENT);
}
调用Window的clearFlags函数来取消FLAG_DISMISS_TOUCH_EVENT属性设置,接下来会将属性更新到WindowManagerService的relayoutWindow函数中,最终调用C++层的InputDispatcher.cpp中新增加的cancelHandleTouchEventInputWindow函数,该函数中只需要将前面定义的boolmHandleTouchEnable成员设为false,将sp<InputWindowHandle>mHandleTouchWindow置为null,最后调用resetTargetsLocked函数重新更新接收触屏消息的目标InputWindowHandle。
C.关于InputDispatcher中触屏消息派发:
当第一线程InputReaderThread线程监控到底层驱动有触屏消息触发后,将触屏消息转交给第二线程InputDispatcherThread线程进行触屏消息的派发,InputReaderThread线程继续监控底层驱动。InputDispatcherThread线程收到InputReaderThread线程发送过来的触屏消息后,调用InputDispatcher组件的dispatchMotionLocked函数进行触屏消息派发,该函数首先会判断成员mCurrentInputTargetsValid的值(前面进行FLAG_DISMISS_TOUCH_EVENT属性设置时,调用resetTargetsLocked函数对该值进行过设置),如果为false,则需要更新当前需要处理触屏消息的目标InputWindowHandle,处理流程如图3及以下所示:
20)进入dispatchMotionLocked触屏消息派发函数;
21)判断mCurrentInputTargetsValid是否为false?若是,则进入步骤22);若否,则进入
步骤27);
该判断步骤的目的主要是:mCurrentInputTargetsValid标识是否需要更新接收处理触屏消息的InputWindowHandle,在进行FLAG_DISMISS_TOUCH_EVENT属性设置或者取消该属性设置后,都会将mCurrentInputTargetsValid设置为false,以便这里更新mCurrentInputTarges向量表。
22)清空mCurrentInputTargets向量表;
23)判断mHandleTouchEnable是否为true?若是,则进入步骤24),若否则进入步骤25);
该判断步骤的目的主要是:在进行FLAG_DISMISS_TOUCH_EVENT属性设置或者取消该属性设置后,都会设置mHandleTouchEnable标志,为true时,需要将设置的mHandleTouchWindow作为处理触屏消息的InputWindowHandle,为false时,将处于FocusActivity对应InputWindowHandle即InputDispatcher.cpp中的成员mFocusWindowHandle作为处理触屏消息的InputWindowHandle。将InputWindowHandle添加到mCurrentInputTargets中。
24)将mHandleTouchWindow添加到mCurrentInputTargets;进而进入步骤26)
25)将mFocusWindowHandle添加到mCurrentInputTargets;进而进入步骤26)
26)将mCurrentInputTargetsValid设置为true,进而跳转步骤27)
27)从mCurrentInputTargets中取出成员InputChannel;
28)将触屏消息写入InputChannel管道中;
步骤27)、28)的主要目的是:直接从mCurrentInputTargets中取出成员InputChannel,InputChannel即是创建的一对InputChannel中的ServerInputChannel,向该InputChannle中写入触屏消息,那么监控ClientInputChannle的应用进程的主线程就会被调度,然后从ClientInputChannle中读取触屏消息,派发给对应Activity进行处理。从而完成触屏消息派发到Activity的过程。
简述所述InputDispatcher中触屏消息派发的实现:在进行FLAG_DISMISS_TOUCH_EVENT属性设置和取消FLAG_DISMISS_TOUCH_EVENT属性设置时,都调用了resetTargetsLocked函数将mCurrentInputTargetsValid设为false,所以这里需要更新处理触屏消息的InputWindowHandle。当mHandleTouchEnable为false时,直接将当前FocusActivity对应的InputWindowHandle作为处理触屏消息的InputWindowHandle。当mHandleTouchEnable为true时,则将FLAG_DISMISS_TOUCH_EVENT属性设置时配置的InputWindowHandle作为处理触屏消息的InputWindowHandle,而不是处于FocusActivity对应的InputWindowHandle。之后将mCurrentInputTaretsValid设置为ture,这样处理下一个触屏消息时,就不需要再次更新处理触屏消息的InputWindowHandlemCurrentInputTagets,而是直接从mCurrentInputTagets取出InputChannel,将触屏消息写入到InputChannle管道中。该InputChannel即是Activity创建时,为了能够在系统进程和应用进程间传递触屏消息所构建的一对管道中的ServerInputChannle,另一个管道ClientInputChannel由Activity所在的应用进程的主线程进行监控。这里向ServerInputChannle中写入了触屏消息,ClientInputChannel会收到该触屏消息,系统会调度起对应的ClientInputChannel对应的应用进程的主线程开始运行,读取ClientInputChannel中的触屏消息,然后调用对应的Activity的触屏消息处理函数进行触屏消息的处理。只要FocusActivity设置了FLAG_DISMISS_TOUCH_EVENT属性,处于该Activity前一个的非FocusActivity就能够接收和处理触屏消息。
如图4所示,本发明提供一种安卓系统的触屏消息处理系统1,其技术原理同上述方法实施例大致相同,因此相同的技术特征不再重复赘述;所述系统1包括:设置模块11,用于对当前获取焦点的第一Activity设置用于放弃处理触屏消息的第一属性;检测模块12,用于当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;处理模块13,用于派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述检测模块12,还用于当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,通过所述处理模块派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
于本发明的一实施例中,所述检测模块12是通过安卓系统中的系统进程创建的第一线程来实现的,所述处理模块13是通过安卓系统中的系统进程创建的第二线程来实现的。
于本发明的一实施例中,所述第二线程通过控制安卓系统中的InputDispatcher组件来实现所述处理模块的功能。
于本发明的一实施例中,所述消息通道包括:成对的第一通道及第二通道;所述第一通道用于接收所述触屏消息;所述第二通道用于与应用进程通信以传输所述触屏消息。
综上所述,本发明提供的安卓系统的触屏消息处理方法及系统,至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性;当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理,当前处于Focus的Activity不进行触屏消息处理时,其它Activity能够接收和处理触屏消息,实现起来清晰、简单、及高效。
所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
Claims (10)
1.一种安卓系统的触屏消息处理方法,其特征在于,包括:
至少将当前获取焦点的第一Activity配置成能设置用于放弃处理触屏消息的第一属性;
当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;
派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
2.根据权利要求1所述的安卓系统的触屏消息处理方法,其特征在于,包括:
当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
3.根据权利要求1或2所述的安卓系统的触屏消息处理方法,其特征在于,所述第一属性的检测是通过安卓系统中的系统进程创建的第一线程来控制的,所述触屏消息的派发是通过安卓系统中的系统进程创建的第二线程来控制实现的。
4.根据权利要求3所述的安卓系统的触屏消息处理方法,其特征在于,所述第二线程通过控制安卓系统中的InputDispatcher组件来实现所述派发。
5.根据权利要求3所述的安卓系统的触屏消息处理方法,其特征在于,所述消息通道包括:成对的第一通道及第二通道;所述第一通道用于接收所述触屏消息;所述第二通道用于与应用进程通信以传输所述触屏消息。
6.一种安卓系统的触屏消息处理系统,其特征在于,包括:
设置模块,用于对当前获取焦点的第一Activity设置用于放弃处理触屏消息的第一属性;
检测模块,用于当检测到所述第一Activity设置所述第一属性时,获取所述第一Activity在Activity栈中至少前一位的第二Activity,并确保其设置有用于传输触屏消息的消息通道;
处理模块,用于派发触屏消息至所述第二Activity以利用其消息通道传输触屏消息至应用进程以供处理。
7.根据权利要求6所述的安卓系统的触屏消息处理系统,其特征在于,所述检测模块,还用于当检测到所述第一Activity取消设置所述第一属性时,阻断所述第二Activity的消息通道,通过所述处理模块派发触屏消息至所述第一Activity以利用其消息通道传输触屏消息至应用进程以供处理。
8.根据权利要求6或7所述的安卓系统的触屏消息处理系统,其特征在于,所述检测模块是通过安卓系统中的系统进程创建的第一线程来实现的,所述处理模块是通过安卓系统中的系统进程创建的第二线程来实现的。
9.根据权利要求8所述的安卓系统的触屏消息处理系统,其特征在于,所述第二线程通过控制安卓系统中的InputDispatcher组件来实现所述处理模块的功能。
10.根据权利要求8所述的安卓系统的触屏消息处理系统,其特征在于,所述消息通道包括:成对的第一通道及第二通道;所述第一通道用于接收所述触屏消息;所述第二通道用于与应用进程通信以传输所述触屏消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510855511.6A CN105487934A (zh) | 2015-11-30 | 2015-11-30 | 安卓系统的触屏消息处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510855511.6A CN105487934A (zh) | 2015-11-30 | 2015-11-30 | 安卓系统的触屏消息处理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105487934A true CN105487934A (zh) | 2016-04-13 |
Family
ID=55674928
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510855511.6A Pending CN105487934A (zh) | 2015-11-30 | 2015-11-30 | 安卓系统的触屏消息处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105487934A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101699395A (zh) * | 2009-10-23 | 2010-04-28 | 深圳市茁壮网络股份有限公司 | 一种多窗口管理方法及多窗口浏览器 |
CN103106000A (zh) * | 2013-01-23 | 2013-05-15 | 东莞宇龙通信科技有限公司 | 多焦点窗口的实现方法及通信终端 |
CN104391649A (zh) * | 2014-12-05 | 2015-03-04 | 上海斐讯数据通信技术有限公司 | 一种多活动触屏消息控制方法及系统 |
CN104461242A (zh) * | 2014-12-08 | 2015-03-25 | 深圳市嘉乐派科技有限公司 | 一种基于Android操作系统的多窗口界面实现方法 |
US20150121304A1 (en) * | 2010-01-19 | 2015-04-30 | Lg Electronics Inc. | Mobile terminal and control method thereof |
-
2015
- 2015-11-30 CN CN201510855511.6A patent/CN105487934A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101699395A (zh) * | 2009-10-23 | 2010-04-28 | 深圳市茁壮网络股份有限公司 | 一种多窗口管理方法及多窗口浏览器 |
US20150121304A1 (en) * | 2010-01-19 | 2015-04-30 | Lg Electronics Inc. | Mobile terminal and control method thereof |
CN103106000A (zh) * | 2013-01-23 | 2013-05-15 | 东莞宇龙通信科技有限公司 | 多焦点窗口的实现方法及通信终端 |
CN104391649A (zh) * | 2014-12-05 | 2015-03-04 | 上海斐讯数据通信技术有限公司 | 一种多活动触屏消息控制方法及系统 |
CN104461242A (zh) * | 2014-12-08 | 2015-03-25 | 深圳市嘉乐派科技有限公司 | 一种基于Android操作系统的多窗口界面实现方法 |
Non-Patent Citations (1)
Title |
---|
HUBINGFOREVER: "WindowManage.layoutParams(上) hubingforever的日志 网易博客", 《WINDOWMANAGE.LAYOUTPARAMS(上) HUBINGFOREVER的日志 网易博客》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110888615B (zh) | 用于Android系统双屏异显的多输入设备交互方法、装置及介质 | |
US20180285149A1 (en) | Task management interface | |
CN105094508A (zh) | 一种移动终端应用程序进行窗口控制的方法和装置 | |
CN110147256B (zh) | 一种多屏交互方法及装置 | |
ES2892976T3 (es) | Generación de interfaz de usuario robótica en respuesta a la conexión de periféricos al robot | |
CN104199734A (zh) | 一种基于安卓智能终端的应用程序多开管理方法和系统 | |
CN102222017B (zh) | 通过不可见接口实现不符合abi特征的方法和系统 | |
CN106990908B (zh) | 一种局部触摸屏蔽方法、装置、系统、设备及存储介质 | |
US20180013697A1 (en) | Software defined visibility fabric | |
WO2016036822A4 (en) | Managing execution state of components in a graph-based program specification for controlling their associated tasks | |
CN106850719A (zh) | 一种数据传输方法及装置 | |
CN106201409A (zh) | 一种应用程序操作界面的处理方法及系统 | |
CN108874677A (zh) | 一种安卓终端及其测试方法和系统 | |
WO2016036813A4 (en) | Controlling data processing tasks | |
CN106293661A (zh) | 图形报表的生成、生成处理方法及装置 | |
CN108008992A (zh) | 一种输入操作处理方法、处理装置及计算机可读存储介质 | |
CN109508287A (zh) | 页面调试方法及终端设备 | |
CN105653353B (zh) | 一种基于容器的多系统交互通讯方法和装置 | |
CN103019848B (zh) | 一种pci总线非向量中断实现方法 | |
CN103377228B (zh) | 一种用于浏览器的页面内容呈现方法及装置 | |
CN103019695B (zh) | 数据对象与状态控制逻辑分离系统和方法 | |
CN104486149B (zh) | 一种用于地面测试的有限状态机方法 | |
CN105022634A (zh) | 一种锁屏属性传递方法及移动终端 | |
CN105487934A (zh) | 安卓系统的触屏消息处理方法及系统 | |
CN115981962B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160413 |