解锁
开始
if (!mImeSelectedOnBoot) {判断是否存在默认输入法
new InputMethodManagerService()
InputMethodManagerService
mSettings.enableAllIMEsIfThereIsNoEnabledIME();如果没有可用输入法,则将当前安装的输入法全部设为可用输入法
结束
updateFromSettingsLocked(true);更新设置信息
updateInputMethodsFromSettingsLocked(true);更新系统中保存的默认输入法信息
defaultImiId = mSettings.getSelectedInputMethod();再次重新获取默认输入法
if (!mImeSelectedOnBoot) {判断系统开机时数据库是否设置了默认输入法
defaultImiId = mSettings.getSelectedInputMethod();//获取数据库中的默认输入法
mImeSelectedOnBoot = !TextUtils.isEmpty(defaultImiId);获取默认输入法是否为空
synchronized (mMethodMap)上锁
startInputInnerLocked();
chooseNewDefaultIMELocked()重新选择默认输入法
if (resetDefaultEnabledIme) {是否重新设置默认输入法
immF.systemRunning()
if (chooseNewDefaultIMELocked()) 判断重新设置默认输入法是否成功
if (!map.containsKey(defaultImiId)) {判断默认输入法是否安装
SystemServer
if(!TextUtils.isEmpty(defaultImiId))判断默认输入法是否为空
resetDefaultImeLocked(context);重新设置默认输入法