上报和分发消息的流程

ONOS中收到OF消息后,分发消息流程分析 ONOS控制器与交换机建立连接之后,通过OF消息的交互,达到了Channel状态机的稳定状态,这时候收到OF消息之后,将分发消息到各个APP处理。 阅读详情

概论

        Android系统中,大体上分为三个层次kernel、framework、app层。对于kernel层,我们主要关心的是驱动,驱动层上报的事件都是原始数据。这些原始数据通过相应的机制上传到framework层的frameworks\base\service\input文件夹下的EventHub文件中对设备进行扫描区分具体的设备,并交由InputReader.cpp进行对数据的读取和分类。到达MotionEvent或者KeyEvent进行处理。此处这样说明总感觉到奇怪。
       (2012-5-14 update)
       在android中我们采用了一种从下而上,又从上而下的过程。在这个过程中我们首先是通过对输入设备的操作,从而使得硬件上报数据,而运行在系统中的线程等待接收数据,从而形成一种服务的关系。而从上而下的过程就是一种管理的过程,在这个过程中,我们上报的事件会得到合理的处理。
        实际在代码中WindowManagerService中对InputManager进行了初始化,并且调用了start函数进行了启动。
       此时大家一定想找到InputManager问个究竟,但是定睛一看,赫然显示两个InputManager。这可叫人如何是好?
       本人猜想,应该此处的调用应该是InputManager.java。因为通常的调用都是从Java开始的。可能此处说法不严谨,但是鄙人认为科学都是“大胆假设、小心验证”。当然就从程序阅读本身也能找到根据。因为此处的构造函数是有参数的。java中有而cpp中没有。(2012年5月7日修订)此处我们往下看的时候,发现在C++里面有函数的重载,而重载的构造函数中就有带有参数的构造函数。那到底此处我们是调用的哪个构造函数呢?当我们开始了解java和其他编程语言的相互调用之后我们发现在Android中我们都会通过JNI机制将本地的函数通过函数指针的形式提供给JAVA层进行调用。所以在命名上一般都以native开头。这样看来我们似乎对这一问题有了更深入的理解。
        接着往下走发现在java中有回调函数和nativeInit,相信大家也是对这个函数比较感兴趣。但是此处还是要简单的说明下此回调函数。该函数则会利用windowManagerService,调用windowManagerService内部的其他方法。我们接着往下走,在nativeInit函数中将会创建一个此处会创建一个EventHub对象,以及InputManager对象。InputManager对象创建InputReaderThread以及InputDispatcherThread线程。在InputManager的构造函数中初始化了EventHub对象,通过传递参数给InptReader的构造函数。此处调用InputListener对事件进行监听,并且将消息放到消息队列中。自此WindowManagerService中对InputManager的初始化过程完成。
       我们在通过EventHub获取数据之后,在inputreader函数中对原始的数据进行cook处理,处理之后形成应用程序能够识别的数据。这时候通过copyfrom函数将数据放到input中。最终通过inputlistener的flush函数进行监听,此过程就是调用notifyMotionevent函数此函数即通过inputdiapatcher进行分发。在数据分发的过程中,是通过flag对数据要进行分发还是拦截进行判断,并进行相应的处理。
       
Android按键事件处理与上报源码分析 本文还有配套的精品资源,点击获取 简介:Android应用开发中,处理按键事件是核心任务之一。文章深入探讨了Android按键事件的处理模型、实现机制和在实际项目中的应用。包括 KeyEvent 类的使用、事件分发机制、自定义按键消息上报、使用 KeyListener 接口以及权限管理等方面。文章旨在帮助开发者掌握如何通过重写 Activ... 阅读详情

相关推荐

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

C++ 自定义标签和使用标签分发

【代码】C++ 自定义标签和使用标签分发。

yasenRK的博客 724

告别regsvr32!易语言调用大漠插件dm.dll的免注册实战(附Win7/10/11避坑指南)

本文详细介绍了易语言如何免注册调用大漠插件dm.dll的实战方法,通过`dmreg.dll`实现真正的免注册调用,规避了传统`regsvr32`注册方式带来的权限和兼容性问题。文章包含核心原理剖析、易语言实现细节、多系统兼容性方案及高级应用场景,帮助开发者实现绿色化部署,提升自动化脚本开发效率。

weixin_42553471的博客 303

文化袁探索专栏——消息分发机制

文化袁探索专栏——Activity、Window和View三者间关系 文化袁探索专栏——View三大流程#Measure 文化袁探索专栏——View三大流程#Layout 文化袁探索专栏——消息分发机制 文化袁探索专栏——事件分发机制 文化袁探索专栏——Launcher进程启动流程’VS’APP进程启动流程 文化袁探索专栏——Activity启动流程 文化袁探索专栏——自定义View实现细节 文化袁探索专栏——线程安全 文化袁探索专栏—— ...

文化园 2253

【论文笔记】LIME: low-light image enhancement via illumination map estimation

【论文笔记】LIME: low-light image enhancement via illumination map estimation 一篇低光图像增强,引用超1000次的经典论文

weixin_45565519的博客 1794

Kali实战:LAMPSecurity CTF5靶场渗透全流程(附详细漏洞利用步骤)

本文详细解析了Kali Linux在LAMPSecurity CTF5靶场渗透中的全流程,包括靶场环境搭建、Web应用漏洞挖掘、横向移动与权限提升等关键步骤。通过实战案例演示了如何利用NanoCMS漏洞获取系统权限,并提供了详细的防御措施与加固建议,帮助安全人员提升渗透测试技能。

weixin_29230901的博客 211

C++消息分发器-简单实现

C++实现多线程分发器

Sweet_Harbour的博客 1611

c++多线程(1)------创建和管理线程td::thread

std::thread 是 C++11 标准库中用于创建和管理线程的核心类,定义在 <thread> 头文件中。它使得多线程编程变得简单、类型安全且跨平台。

jndingxin的专栏 648

Android 消息分发机制解读

并开始无限循环,也就是App的心脏,一直跳动,负责协调分配来自各方的事件,让App不断响应用户操作,如果主线程出现了异常,也就是心脏跳动异常停止,那么App的生命随之终止,也就是常见的‘进程已停止运行’。那么,你有没有想过,既然他在一直无限循环,为什么没有卡死呢?为什么能看到“应用无响应”?怎么保证界面刷新不受其他事件影响,怎么做到有条不理的处理每一条消息等等这些问题呢,作为一名Android开发者,我想我们有必要对其结构进行简单了解。至此,相信你对消息分发机制也有大概的理解。

WeiPR的博客 624

【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏

本文介绍了在Unity中使用Wheel Collider组件实现3D车辆物理控制系统的详细步骤。主要内容包括: Wheel Collider参数详解:包括基础参数(质量、半径等)、悬挂弹簧系统(弹力、减震等)和摩擦力设置(前向/侧向摩擦曲线)。 准备工作流程: 导入赛车模型、赛道和树木素材 为车身添加Rigidbody和MeshCollider 创建四个Wheel Collider并调整参数(半径、悬挂距离等) 优化摩擦系数设置防止侧滑 实现车辆控制: 通过代码控制车轮前后移动和转向 提供底盘系统设置(四轮

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2658

手撕数美风控三板斧:device_fingerprint/device_id/hmac生成逻辑全解析

摘要:逆向分析数美风控核心参数生成机制 本文详细记录了逆向分析数美(Shumei)风控系统中三个关键参数(device_id、device_fingerprint、hmac)的生成逻辑。通过抓包分析和动态调试(使用Frida、IDA等工具)发现:device_id由设备IMEI和Android ID经MD5哈希生成;device_fingerprint融合23项设备与环境信息,并采用SHA-256哈希和动态环境检测;hmac则是参数+指纹+动态盐值的SHA-256签名。文章揭示了数美"设备指纹+动

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1466

【RabbitMQ】消息分发机制

RabbitMQ 分发消息默认采用的轮训分发,但是在某种场景下这种策略并不是很好,当有两个消费者在处理任务时,其中有个消费者 处理任务的速度非常快,而另外一个消费者处理速度却很慢,这个时候我们还是采用轮训分发就会导致这处理速度快的这个消费者很大一部分时间处于空闲状态。我们可以通过修改消息分发德默认机制,来达到优化目的;通过设置参数 实现不公平分发策略使得能者多劳; 通过RabbitMq的Web管理页面,可以看到的属性显示为则表示不公平分发成功; 当消息被消费者接收后,但是没有确认,此时这里就存在一个未确认

记录各种Bug解决案例及日常学习内容 1347

《手把手教你修复过期K8s集群证书:记一次K8s集群起死回生实录》

今天本想打开半年前部署的K8s测试集群跑个Demo,结果`kubectl`直接报错`certificate has expired`!作为一名云原生老司机,我决定把这次'抢救'过程记录下来,手把手带大家解决这个运维常见问题。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3779

Android 4.0 触摸屏消息(一大写的一)

“消息”一词最早出现于《易经》:“日中则昃,月盈则食,天地盈虚,与时消息。“意思是说,太阳到了中午就要逐渐西斜,月亮圆了就逐渐亏缺,天地间的事物,或丰盈或虚弱,都随着时间的推移而变化,有时消减,有时滋长。由此可见,中国古代就把客观世界的变化,把它们的发生、发展和结局,把它们的枯荣、聚散、沉浮、升降、兴衰、动静、得失等等变化中的事实称之为”消息“。----------摘自度娘。

曹太强的专栏 4395

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 4.0按键事件以及电源管理流程分析

Android是集成了linux内核以及frameworks层的东西而形成为os,其中主要包含了三种语言的编程,主要是c、c++以及java。因此他们之间的通信问题就显得尤为突出。 JAVA与c的通讯主要是通过JNI机制进行的。为了提高效率,在上层都使用java进行编程。因此在阅读源代码的过程中,就需要区分给用户使用的文件,系统内部使用的文件,以及与驱动打交道的文件。 Android获取系统消...

管子(zero)的杂乱空间 146

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MiniGUI事件传递机制分析

这段时间学习了一下MiniGUI中的事件传递机制,包括从内核驱动上报事件到MiniGUI分发事件这一整条通路,在嵌入式平台上,获取触摸事件可以使用tslib框架,通过tslib获取到事件之后,会把消息保存在桌面消息队列中,然后进一步分发到应用消息队列,我会在这篇文章中详细说明

逐梦的博客 2095

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android消息类型及事件分发流程

Android消息类型及事件分发流程

薛文旺 1681

再谈Android消息分发

线程内调用 Looper.prepare():创建自己的Looper对象和MessageQueue,新建Hander(Looper.myLooper)用于发送本线程的消息,通过Looper.loop来执行本线程消息分发,同时结束时执行Looper.myLooper().quit()退出当前线程,不然线程一直运行,这也是HandlerThread的使用原理。Handler消息分发,优化判断msg.callback是否为null,如果不是先执行它,再执行handlerMessage。..............

劝学 2475

Android基础-消息分发机制

Android中的消息分发机制是一个复杂而精巧的系统,它确保了Android应用的高效运行和响应性。通过Handler、Looper、MessageQueue和Message等核心组件的协同工作,Android系统能够处理各种事件和消息,并在正确的时机和线程中执行相应的处理逻辑。这种机制不仅提高了系统的并发性能,还降低了线程间通信的复杂性。

层楼终究误少年 1084

RabbitMQ根据队列、路由键把消息从exchange分发给对应的queue

通过以上步骤,可以清晰地了解如何在RabbitMQ中根据队列和路由键将消息从exchange分发到对应的queue。

weixin_69649048的博客 1632

RocketMQ源码11-broker 消息分发流程(ConsumeQueue和BuildIndex)

reput其实就是后台一个线程,不停的从commitlog取出消息,然后看看这个消息是哪个topic的哪个queue的,然后找到对应的consumeQueue,将消息在commitlog中的一个offset 还有几个其他信息写入到这个consumeQueue中,reput不光写入consumeQueue这一个事情,还有一个就是为这个消息构建索引,第4小节说这个。

BASK2312的博客 669

Qt消息机制:事件分发和事件过滤

目录 图形界面应用程序的消息处理模型 Qt中的事件处理 (1)在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. (2)Qt平台将系统产生的消息转变成Qt事件 (3) event()函数-事件分发 (3)GUI应用程序的事件处理流程 (4)事件(QEvent)和信号(SIGNAL)的不同 图形界面应用程序的消息处理模型 特点: 基于操作系统才能运行 GUI应用程序提供的功能必须由用户触发 用户操作界面时操作系统是第一个感知的 系统内核...

DayDayUp 6890

c++ 消息分发 消息管理

消息分发机制 当接收到前端发来的消息并解析后 根据包头的消息码来决定分发到哪个模块,以及调用哪个函数步骤1、需要注册消息码 为了之后找到这个消息码需要干什么事步骤2、接收到消息并解析后调用根据解析的包头里的消息码到消息管理器里找对应的消息码分发到对应的部件或者函数步骤3、在对应的部件上面回调写的函数不多说了直接上代码// MH_Base.h #ifndef __MH_Base_h__ #defin...

machuanfei_c的专栏 5121
上一篇: AIDL简介
下一篇: Android frameworks层启动分析
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值