b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

触摸屏虚拟键盘 Android Touch事件传递机制全面解析(从WMS到View树)(3)

电脑杂谈  发布时间:2018-02-19 12:20:49  来源:网络整理

addToDisplay方法在Session类中,它会调用WindowManagerService的addWindow方法。而两个InputChannel的初始化操作都是在这里面的这这段代码中进行的。

            if (outInputChannel != null && (attrs.inputFeatures
                    & WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL) == 0) {
                String name = win.makeInputChannelName();
                InputChannel[] inputChannels = InputChannel.openInputChannelPair(name);
                win.setInputChannel(inputChannels[0]);
                inputChannels[1].transferTo(outInputChannel);

                mInputManager.registerInputChannel(win.mInputChannel, win.mInputWindowHandle);
            }

这里的InputChannel.openInputChannelPair方法会在native层创建两个InputChannel,也就是我们上面看到的那两个,并返回相应的framework层InputChannel的两个对象,保存在iputChannels数组中,当中一个保留字server端,一个通过transferTo方法返回到client 端。

这里的InputChannel.openInputChannelPair方法和transferTo方法中都是直接调用来了native方法,这里不再贴代码。

? ? ? ?说了这么多。事实上就是一个Binder机制,关于Binder机制。大家自行在搜索吧,入门的资料还是挺多的。

这里我依据源代码画了两份ViewRootImpl和WMS之间通过Binder 机制进行IPC的序列图,有兴趣的能够自行研究下代码,仅仅要能搞清楚Binder机制。这部分代码还就不难懂。

ViewRootImpl到WMS的连接,通过WMS提供给ViewRootImpl的IWinowSession成员,也就是Session在本地的代理来完毕:

触摸屏软键盘_诺基亚触屏虚拟键盘_触摸屏虚拟键盘

技术分享图片

? ?

? ? ?WMS到 ViewRootImpl的连接,通过ViewRootImpl提供给WMS的Iwindow(ViewRootImpl的内部类)来完毕:

技术分享图片

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />

Touch事件在View树中的分发

当Touch事件传递到了ViewRootImpl中后,就会在View树中进行分发,要了解Touch事件在View树中的分发。首先须要了解View树的创建,这部分又可以写成一篇单独的博文了。详细的过程这里不再详说,有兴趣的能够自己研究下。

View树创建完毕后的结构是这种(图片源自网络):


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-84984-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...