一种嵌入式设备多点触控的缓存优化方法与流程

文档序号:15346216发布日期:2018-09-04 22:47阅读:254来源:国知局

本发明涉及多点触控技术领域,具体涉及一种嵌入式设备多点触控的缓存优化方法。



背景技术:

多点触控,即多点触摸技术,指的是允许用户同时通过多个手指来控制图形界面的一种技术,比较常见的应用产品如:智能手机(iphone、android)、ipad等。随着智能手机的普及,越来越多的智能设备也加入了触屏的大军。目前比较多的产品直接搭载android系统来满足多点触控的需求,另外也有使用稳定的ui库来实现多点触控功能(如:qt库)。android系统提供了完整的触屏解决方案,但是android系统的空间和内存占用比较大,对于一些硬件有限制的嵌入式设备来说还是不合适。

在嵌入式设备的开发中,通常会使用自己开发的或第三方的ui库来构建gui进程。而成熟的ui库都会有独立的窗口消息循环机制,来实现对用户输入的响应和界面的显示等。但是却没有提供比较完善的触点缓存机制,而是单纯依靠消息队列来缓存触点信息。

目前嵌入式设备上依靠ui库的消息队列来缓存多点触控信息和传递触控事件的话,存在以下问题:

首先,ui库正常会有一个主线程来处理界面的业务逻辑,在嵌入式设备硬件受限的情况下,主线程业务处理的时间间隔是不固定的,业务处理的时间间隔可能会超过触控点的上报时间间隔。如果在主线程中读取并处理触控点,会造成触控点被滞留在驱动的缓存中,而且驱动的缓存大小也是有限的,触控点如果不及时取走的话,会被覆盖掉,从而造成触控点的丢失。

其次,正常情况下可以创建一个新的线程来读取驱动上报的触控点数据,然后将触控点数据发送到ui库的消息队列中处理。这种情况在性能好的设备上是比较常见的,但是在设备受限的嵌入式设备上,当触点处理时间大于上报时间时,持续地在触屏上滑动会出现以下问题:一、大量的触点滑动信息被堆积在消息循环中,内存会不断增加,造成内存大量被占用;二、在消息队列大小受限的ui库中,会造成消息队列爆掉,轻则造成触点信息出错(滑动过程中有其他触点按下或抬起,按下或抬起的信息丢失的话,会造成ui状态出错),重则造成消息循环出错导致停止运行;三、大量的触点被堆积,然后排队逐个执行,会出现滑动的ui表现迟滞,体验大大降低。

最后,触屏的手势和动画中比较常用的一个关键信息是滑动的速度。正常情况下,可以在处理触点时根据前后两个处理的时间点算出滑动的速度。但是在性能受限的嵌入式设备上,业务处理的时间波动比较大,这样就会造成计算出来的滑动速度误差比较大。用这个速度来实现手势或动画的话,ui效果的平滑性就比较差。如果把上报的时间戳(64位)都上传的话,数量量大,另外一些ui库中已有的消息结构也不支持扩展携带额外的数据。



技术实现要素:

本发明的目的在于提供一种嵌入式设备多点触控的缓存优化方法,其使用策略合并的缓存方法,实现嵌入式设备的多点触控性能平稳,提高触屏体验的平滑流畅度。

为实现上述目的,本发明采用的技术方案是:

一种嵌入式设备多点触控的缓存优化方法,其具体包括以下步骤:

步骤1、采用触点处理线程读取触点信息;

步骤1.1、读取底层触点信息,并将其加工为上层触点信息;

步骤1.2、从触点对象缓存单元中分配触点对象给触点信息,并将该触点信息设置到相应的触点对象上;

步骤1.3、判断当前触点信息与上一个触点信息的触点动作类型是否一样,若触点动作类型一样,则进行触点信息合并,将当前触点信息更新到待处理触点队列中,同时将触点对象回收到触点对象缓存单元中;若触点动作类型不一样,则将触点对象增加至待处理触点队列中,同时发送消息通知ui线程处理触点对象;

步骤2、采用ui线程处理触点对象;

步骤2.1、ui线程根据触点处理线程发送的消息,申请获取待处理触点对象,当ui线程成功获取触点对象后,将该触点对象从待处理触点队列移动至待回收触点队列;

步骤2.2、ui线程通过触点消息处理系统对触点对象进行处理,处理完成后,向触点处理线程发送回收触点消息;

步骤3、触点处理线程接收到ui线程发送的回收触点消息后,将已经处理完成的触点对象从待回收触点队列回收到触点缓存单元中。

采用上述方案后,本发明对触点信息进行缓存管理,保证正常场景下使用触点信息时,不需要频繁地申请内存分配和释放内存,提高效率;同时使用待处理触点队列进行触点信息的上报,而当ui线程对触点对象处理完成后采用待回收触点队列进行触点对象的回收,保证触点对象有序处理和回收,而当出现触点信息处理赶不上触点信息的上报时,根据合并策略将新上报的触点信息合并掉待处理的触点信息,保证触点队列和消息队列不会爆增,避免触点堆积造成触屏效果迟滞。

此外,本发明使用消息通知的方式来实现触点读取线程与ui库主线程的通信,保证触点处理、触点回收的异步处理。

综上,本发明有效地解决了触点处理比上报慢导致的内存爆增、消息队列溢出、以及触屏响应迟滞和不平滑等问题。

附图说明

图1为本发明原理框图;

图2为本发明触点处理线程读取触点信息流程图;

图3为本发明ui线程的触点处理流程图;

图4为本发明触点处理线程回收触点对象流程图。

具体实施方式

如图1所示,本发明揭示了一种嵌入式设备多点触控的缓存优化方法,其采用触点处理线程读取触点信息,并用待处理触点队列进行触点信息的上报以及用待回收触点队列进行触点对象的回收,当出现触点信息处理赶不上触点信息的上报时,根据合并策略将新上报的触点信息合并掉待处理的触点信息。

如图2至图4所示,本发明的嵌入式设备多点触控的缓存优化方法具体包括以下步骤:

步骤1、采用触点处理线程读取触点信息;

步骤1.1、读取底层触点信息,并将其加工为上层触点信息;

步骤1.2、从触点对象缓存单元中分配触点对象给触点信息,并将该触点信息设置到相应的触点对象上;

步骤1.3、判断当前触点信息与上一个触点信息的触点动作类型是否一样,若触点动作类型一样,则进行触点信息合并,将当前触点信息更新到待处理触点队列中,同时将触点对象回收到触点对象缓存单元中;若触点动作类型不一样,则将触点对象增加至待处理触点队列中,同时发送消息通知ui线程处理触点对象。

步骤2、采用ui线程处理触点对象;

步骤2.1、ui线程根据触点处理线程发送的消息,申请获取待处理触点对象,当ui线程成功获取触点对象后,将该触点对象从待处理触点队列移动至待回收触点队列;

步骤2.2、ui线程通过触点消息处理系统对触点对象进行处理,处理完成后,向触点处理线程发送回收触点消息。

步骤3、触点处理线程接收到ui线程发送的回收触点消息后,将已经处理完成的触点对象从待回收触点队列回收到触点缓存单元中。

本发明的关键在于,本发明对触点信息进行缓存管理,保证正常场景下使用触点信息时,不需要频繁地申请内存分配和释放内存,提高效率;同时使用待处理触点队列进行触点信息的上报,而当ui线程对触点对象处理完成后采用待回收触点队列进行触点对象的回收,保证触点对象有序处理和回收,而当出现触点信息处理赶不上触点信息的上报时,根据合并策略将新上报的触点信息合并掉待处理的触点信息,保证触点队列和消息队列不会爆增,避免触点堆积造成触屏效果迟滞。

此外,本发明使用消息通知的方式来实现触点读取线程与ui库主线程的通信,保证触点处理、触点回收的异步处理。

以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1