Android T 输入法框架新特性

663 阅读2分钟

Android T IME Framework

背景/简介

输入法框架作为输入法的核心服务类, 主要是用来控制整个android系统内输入法显示、隐藏以及启动等相关逻辑。

其实谷歌的团队也发现了IMMS类里面承担了太多的职责导致复杂度太高,一些特定的功能逻辑可以单独抽离出来。他们在S版本其实已经做了一些工作了,如将控制显示输入法选择弹窗的逻辑抽离成InputMethodMenuController等,在T版本上谷歌也延续了这个思路继续对输入法框架代码进行重构优化。

T版本上,整体输入法启动、显示等流程几乎没有变化,主要变化就是对代码结构的重构以及优化。

新/旧特性介绍

1. IMMS内添加命令 直接控制输入法

adb shell ime list

adb shell ime enable com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

as ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

2. 抽出了mMainConnection和mVisibleConnection来管理输入法的状态

当输入法正常start的时候,会去通过mMainConnection这个connection来bind输入法;

当显示输入法的时候,会再通过mVisibleConnection来bind下输入法

3. 新建了InputMethodBindingController、IInputMethodInvoker、InputMethodDialogWindowContext等类

InputMethodBindingController:他是一个管理所有输入法连接的控制类,将所有的对输入法服务的连接、绑定等操作全部封装到了该类里面

IInputMethodInvoker:对IInputMethod 即bp端的包装类,imms通过该类binder调用到ims端,同时该类主要作用就是可以扩展一些功能

InputMethodDialogWindowContext:该context就是用来构建输入法选择弹窗。

其余的都是一些细节性的优化,这里不再详细概述了。

4.R版本上输入法框架结构图(S版本几乎没有啥大的修改)

这是之前R版本输入法的整体框架,其实大体没有多大改变,改变主要是发生在系统进程内的IMMS类内

5.新增变化主要如下图

Q&A

本文就简单整理了下T版本输入法框架的一些修改,关于输入法的启动以及显示流程后续会再整理一篇文档。

欢迎读者提出意见以及建议,可以一起讨论下:)