Skip to content

EventDispatcher

罗坤 edited this page Mar 6, 2020 · 1 revision

com.facebook.react.uimanager.events.EventDispatcher.java

负责将UI事件分配给JS的类,该类的主要目的是充当UI代码生成事件和JS之间的中介,确保我们发送的事件不超过JS可以处理的事件。

要使用它,请创建{@link Event}的子类,并在有UI事件要分派时调用{@link #dispatchEvent(Event)}。

此类通过在主线程上安装Choreographer框架回调函数来工作,然后该回调函数在JS线程(如果尚未挂起)上排队运行一个可运行对象,该线程负责将事件实际分配给JS。 1)在Choreographer.java中处理UI事件后,FrameCallbacks运行的属性; 2)当我们在JS队列线程中排队一个可运行对象时,直到任何先前入列的JS作业完成处理后,它才会被调用

如果JS需要花费很长时间来处理事件,那么可以将UI线程上生成的UI事件合并为更少的事件,以便在可运行的运行时,我们不会使JS过载大量事件并使之走得更远。

理想情况下,我们不需要这样做,并且JS足够快地处理每个帧中的所有事件,但是会发生不好的事情,包括系统中CPU的负载,我们应该妥善处理这种情况。

==事件Cookies ==

事件cookie由事件类型id,视图标记和自定义合并键组成。只有具有相同cookie的事件才可以合并

事件Cookie组成: VIEW_TAG_MASK = 0x00000000ffffffff  EVENT_TYPE_ID_MASK = 0x0000ffff00000000 COALESCING_KEY_MASK = 0xffff000000000000

Clone this wiki locally