当前位置: 首页 > wzjs >正文

wordpress网站 添加微信凌云网站

wordpress网站 添加微信,凌云网站,有效的小企业网站建设,lanyun网站开发概述 上一个章节,我们讲解了App通过注册InputEventReceiver获取从Input服务上报的输入事件的流程,在讲述App处理具体输入事件之前,我们讲述App处理输入事件的模型,也就是本章要讲述的InputState Pipeline。 源码路径 framework…

概述

上一个章节,我们讲解了App通过注册InputEventReceiver获取从Input服务上报的输入事件的流程,在讲述App处理具体输入事件之前,我们讲述App处理输入事件的模型,也就是本章要讲述的InputState Pipeline。

源码路径

frameworks/base/core/java/android/view/ViewRootImpl.java

Input事件处理模型

View Input事件处理的Pipeline模型建立在InputStage这个抽象接口基础之上,我们这里先讲述InputStage的实现,我们只列出InputStage的核心接口实现,如下所示:

abstract class InputStage {private final InputStage mNext;protected static final int FORWARD = 0;protected static final int FINISH_HANDLED = 1;protected static final int FINISH_NOT_HANDLED = 2;public InputStage(InputStage next) {mNext = next;}public final void deliver(QueuedInputEvent q) {if ((q.mFlags & QueuedInputEvent.FLAG_FINISHED) != 0) {forward(q);} else if (shouldDropInputEvent(q)) {finish(q, false);} else {apply(q, onProcess(q));}}protected void finish(QueuedInputEvent q, boolean handled) {q.mFlags |= QueuedInputEvent.FLAG_FINISHED;if (handled) {q.mFlags |= QueuedInputEvent.FLAG_FINISHED_HANDLED;}forward(q);}protected void forward(QueuedInputEvent q) {onDeliverToNext(q);}protected void apply(QueuedInputEvent q, int result) {if (result == FORWARD) {forward(q);} else if (result == FINISH_HANDLED) {finish(q, true);} else if (result == FINISH_NOT_HANDLED) {finish(q, false);} else {throw new IllegalArgumentException("Invalid result: " + result);}}protected int onProcess(QueuedInputEvent q) {return FORWARD;}protected void onDeliverToNext(QueuedInputEvent q) {if (DEBUG_INPUT_STAGES) {Log.v(mTag, "Done with " + getClass().getSimpleName() + ". " + q);}if (mNext != null) {mNext.deliver(q);} else {finishInputEvent(q);}}}

1、deliver的实现,因为他决定input事件处理方式方法实现如下:

 public final void deliver(QueuedInputEvent q) {if ((q.mFlags & QueuedInputEvent.FLAG_FINISHED) != 0) {forward(q);} else if (shouldDropInputEvent(q)) {finish(q, false);} else {apply(q, onProcess(q));}}

deliver的核心逻辑,如下所示:

a、当前input事件直接被转发到下一级的InputStage进行处理 forward;

b、如果input事件在当前InputStage中被丢弃了,直接设置input事件被处理完成标记,并转发给下一级的InputStage;

c、当前InputStage进行处理调用process方法,然后根据处理的结果,决定input输入事件,是否向下一级的InputStage进行处理;

2、finish的实现非常简单,将事件打上FINISHED标签,然后转发;

 protected void finish(QueuedInputEvent q, boolean handled) {q.mFlags |= QueuedInputEvent.FLAG_FINISHED;if (handled) {q.mFlags |= QueuedInputEvent.FLAG_FINISHED_HANDLED;}// 当前InputStage不再处理,直接转发forward(q);}

3、forward 转发给下一级的InputStage处理

protected void forward(QueuedInputEvent q) {onDeliverToNext(q);}

4、apply 根据result结果,其本质也就是调用onProcess的返回结果,然后决定input事件下一步的处理方式。

protected void apply(QueuedInputEvent q, int result) {if (result == FORWARD) {forward(q);} else if (result == FINISH_HANDLED) {finish(q, true);} else if (result == FINISH_NOT_HANDLED) {finish(q, false);} else {throw new IllegalArgumentException("Invalid result: " + result);}
}

5、onProcess 的默认行为是转发。子类可以覆盖其实现,决定input事件的处理方式;

 protected int onProcess(QueuedInputEvent q) {return FORWARD;}

6、onDeliverToNext 直接转发给下一级的InputStage进行处理

 protected void onDeliverToNext(QueuedInputEvent q) {if (DEBUG_INPUT_STAGES) {Log.v(mTag, "Done with " + getClass().getSimpleName() + ". " + q);}if (mNext != null) {mNext.deliver(q);} else {finishInputEvent(q);}}

7、finishInputEvent 结束事件的处理流程。然后直接将处理结果返回给InputEventReceiver处理。

private void finishInputEvent(QueuedInputEvent q) {Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW, "deliverInputEvent",q.mEvent.getSequenceNumber());if (q.mReceiver != null) {boolean handled = (q.mFlags & QueuedInputEvent.FLAG_FINISHED_HANDLED) != 0;q.mReceiver.finishInputEvent(q.mEvent, handled);} else {q.mEvent.recycleIfNeededAfterDispatch();}recycleQueuedInputEvent(q);}

Input Pipeline的建立

Input Pipeline的建立,是在ViewRootImpl中的setView方法中,如下所示:

void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {......// Set up the input pipeline.CharSequence counterSuffix = attrs.getTitle();mSyntheticInputStage = new SyntheticInputStage();InputStage viewPostImeStage = new ViewPostImeInputStage(mSyntheticInputStage);InputStage nativePostImeStage = new NativePostImeInputStage(viewPostImeStage,"aq:native-post-ime:" + counterSuffix);InputStage earlyPostImeStage = new EarlyPostImeInputStage(nativePostImeStage);InputStage imeStage = new ImeInputStage(earlyPostImeStage,"aq:ime:" + counterSuffix);InputStage viewPreImeStage = new ViewPreImeInputStage(imeStage);InputStage nativePreImeStage = new NativePreImeInputStage(viewPreImeStage,"aq:native-pre-ime:" + counterSuffix);mFirstInputStage = nativePreImeStage;mFirstPostImeInputStage = earlyPostImeStage;mPendingInputEventQueueLengthCounterName = "aq:pending:" + counterSuffix;......
}

整个流水线的连接过程我们不再描述,最终建立起来了如下所示的流水线结构,流水从左向右进行执行,流水的起点由mFirstInputStage或者mFirstPostImeInputStage开始。

总结

本文描述了View处理input事件的Pipeline模型的实现,下一个章节讲述App处理input事件的具体过程。


文章转载自:

http://k1DXoh4L.qmpbs.cn
http://QTPLM6JK.qmpbs.cn
http://D3GNFfBx.qmpbs.cn
http://Bgt8cyon.qmpbs.cn
http://shteIFSv.qmpbs.cn
http://kv5kXRIO.qmpbs.cn
http://rxTYlBT6.qmpbs.cn
http://nO7iDd3b.qmpbs.cn
http://70tEx0Si.qmpbs.cn
http://r4jIg5IN.qmpbs.cn
http://k3D7eqxx.qmpbs.cn
http://DN8ogPRC.qmpbs.cn
http://mNyqEegA.qmpbs.cn
http://CtDipsmV.qmpbs.cn
http://mSc3qJLj.qmpbs.cn
http://Zw2GIOJ4.qmpbs.cn
http://ybehlMs2.qmpbs.cn
http://ylktA1mX.qmpbs.cn
http://eS6lqpBM.qmpbs.cn
http://LoOn7uO7.qmpbs.cn
http://IrM35quJ.qmpbs.cn
http://zjBZ3rMt.qmpbs.cn
http://MJgqPzxf.qmpbs.cn
http://GsOUdYfb.qmpbs.cn
http://FHyJaTa9.qmpbs.cn
http://U4cit7Ex.qmpbs.cn
http://Ncd6Zfbx.qmpbs.cn
http://x9m8sU1I.qmpbs.cn
http://5wkKJtaz.qmpbs.cn
http://RV9BNnA3.qmpbs.cn
http://www.dtcms.com/wzjs/761725.html

相关文章:

  • python做网站wordpress微信快捷支付
  • 北京网站建设公司代理一个新的网站怎么做宣传
  • 几何背景生成网站会计事务所
  • 两个网站做响应式网站建设银行的网站用户名是什么
  • 旅游公司网站 优帮云做电脑网站宽度
  • 做购物网站的初衷重庆网站建设哪家便宜
  • 做调查的有哪些网站win10虚拟机做网站
  • 京挑客网站建设九江网站建设排行榜
  • 长春一大网站成都官网搭建公司
  • 网站备案年限查询涿州网站建设
  • 陕西交通建设集团西镇分公司网站手机网站模板网
  • 西安网站优化推广方案企业网站的设计论文
  • 网站后台修改图片集顺序wordpress 不做SEO
  • 咸阳专业网站建设wordpress 插件经验
  • 域名绑定网站高清视频网络服务器
  • 网站建设论文基础摘要微信订阅号做网站
  • 免费照片的网站模板免费下载wordpress建立php站点地图
  • 济南网站建设yigeseo怎么做外卖网站
  • 网站做以后怎么修改网站内容企业网站 单页
  • 网站开发需求表成都软件公司排名
  • 网站建设需要具备哪些知识北京专业做网站公司
  • 佛山制作网站公司吗汽车网站模板下载
  • 网站建设业务方法wordpress占用id
  • 网站代运营公司有哪些做网站的服务商
  • 用php做购物网站视频福田蒙派克g5
  • 更改网站logo地址怎么讲解网页的制作技术
  • 网站程序如何上传苏州网络推广公司服务平台
  • 做网站平台多少钱seo排名赚app官网
  • 中国备案查询网站wordpress沙盒框架
  • 浙江省建设厅新网站人员无法查询促销礼品网站建设