上报和分发消息的流程

概论

        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对数据要进行分发还是拦截进行判断,并进行相应的处理。
       
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C知道:xxl-job是一个分布式任务调度平台,它可以帮助开发人员实现任务的定时调度和分布式执行。下面是xxl-job的执行流程: 1. 注册执行器:在xxl-job管理员界面上注册执行器,配置执行器的名称、IP地址、端口等信息。执行器是任务的具体执行者,可以是一个独立的服务或者一个应用程序。 2. 创建任务:在xxl-job管理员界面上创建任务,配置任务的相关信息,例如任务名称、任务组、Cron表达式等。任务组可以用于对任务进行分类管理。 3. 添加调度器:在xxl-job管理员界面上添加调度器,配置调度器的名称、Cron表达式等信息。调度器是用于触发任务执行的组件,可以根据设定的时间规则触发任务的执行。 4. 执行器心跳:执行器会定时向xxl-job管理员发送心跳请求,以告知自己的存在和可用状态。管理员通过心跳检测来获取执行器的状态信息。 5. 调度器触发任务:当调度器触发任务执行时,会向xxl-job管理员发送任务执行请求。 6. 任务分发:xxl-job管理员根据负载均衡策略选择一个可用的执行器,并将任务分发给该执行器。 7. 任务执行:执行器接收到任务后,根据配置的任务逻辑进行执行。执行器可以是一个独立的服务,也可以是一个应用程序。 8. 任务结果上报:执行器执行任务完成后,将任务执行结果上报给xxl-job管理员。管理员可以通过任务结果信息来监控任务的执行情况。 总结来说,xxl-job的执行流程主要包括注册执行器、创建任务、添加调度器、执行器心跳、调度器触发任务、任务分发、任务执行和任务结果上报等步骤。通过这些步骤,xxl-job能够实现任务的定时调度和分布式执行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值