热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

androidframework触摸屏事件传递

androidframework触摸屏事件传递对于像我这样刚入门的Android程序员,如果想大致弄清楚触摸屏事件传到用户界面的过程,我觉得需要弄清楚以下几个部分:一Activity,

android framework 触摸屏事件传递

    对于像我这样刚入门的Android程序员,如果想大致弄清楚触摸屏事件传到用户界面的过程,我觉得需要弄清楚以下几个部分:

一 Activity, Window,View之间的关系

二  Window,WindowManager,WindowManagerServer的创建和消息传递的基本规则

三 本地类 InputReader , InputDispatcher 的创建,对触摸屏事件的读取和派发

四 触摸屏事件从InputDispatcher怎么传递到Window

五 触摸屏事件在ViewGroup/view中的传递

为了看懂相关代码,还有两个android比较重要的框架的实现:JNI 和 Binder。 这两种功能,我个人觉得,不必要很精通,能知道从哪里找到调用的方法即可。


首先,把各种涉及到的重要的接口名/类名列出来,混个脸熟。

Activity

Window

PhoneWindow

DecorView

ViewRoot ( android4.0 中为 ViewRootImpl )

WindowManager

WindowManagerImpl

LocalWindowManager

WindowManagerServer

InputManager

InputReader

InputDispatcher

接下来,一起看看各个部分。


一 Activity, Window,View之间的关系

Activity , 只要写过Android程序的人都知道,android的四大金刚之一。Activity是应用程序的载体。它并不参与界面的显示,界面的显示都交给Window来管理。

PhoneWindow是从Window派生来的,Window是一个抽象类。每个Activity中有且只有一个PhoneWindow。(至于PhoneWindow的作用,这里我暂时还无法很准确地归纳,希望有牛人赐教)

DecorView,DecorView是一个扩展的FrameLayout的类,是窗口中所有View的根View

ViewRoot, 每个Window都会对应一个ViewRoot对象。ViewRoot从Handle派生过来,处理各种其它模块发送的事件。比如触摸屏事件就是从其它模块发送到ViewRoot后,由ViewRoot的handleMessage()方法处理的。

(未完待续,本人初学,如果有问题,敬请指出,一起讨论)


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • andr ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
author-avatar
高傲的辫子
这个家伙很懒,什么也没留下!
RankList | 热门文章