InputMethodService

想实现一个输入法的应用程序,必不可少的就需要了解InputMethodService的生命周期,通过了解InputMethodService的生命周期,掌握input view和候选区域的绘制时机。 我们通过一张输入法生命周期流程图来了解一下整个过程。

接下来我们详细的介绍一下每一个生命周期的特征

onCreate()

输入法创建过程时首先调用该方法.由于常驻在进程当中,在没有OnDestory之前只会调用该方法一次

onInitializeInterface()

紧随着onCreate()方法后调用,用于界面初始化以及用于service运行过程中配置信息发生改变的情况(横竖屏转换等,会触发onConfigurationChanged()方法)

onBindInput

用于发现客户端的变化,当新的客户端绑定到输入法时,该方法会被调用,在输入法第一次启动时,会马上调用onStartInput方法获取编辑框数据,否则,先调用onFinishInput方法,而后调用onStartInput方法

onStartInput

走完onBindInput(),会调用该方法.用于处理客户端发起的输入会话,输入法可以获取到相对应的编辑框的信息,用于决定展示什么类型的键盘.在输入法周期中会频繁的调用.

onCreateInputView()

在该生命周期中主要用于初始化跟input area区域相关的类和变量.

onCreateCandidateView()

在该生命周期中主要用于初始化跟candidate area区域相关的类和变量.

onCreateExtractTextView

在输入法全屏模式下会调用,用于创建并返回用于显示(extracted text)文本信息的区域视图,返回的视图必须包含ExtractEditText,且ID值为inputExtractEditText,默认情况下横屏模式时,输入法为全屏效果。

onConfigureWindow()

通常在窗口发生改变时候调用,比如在获取到输入视图时调用和失去输入视图时.

onStartInputView()

输入视图正在显示并且编辑框输入已经获取焦点时回调该方法用于创建并返回(input area)输入区域的层次视图,该方法只被调用一次(输入区域第一次显示时),该方法可以返回null,此时输入法不存在输入区域,InputMethodService的默认方法实现返回值为空,想要改变已经创建的输入区域视图,我们可以调用setInputView(View)方法,想要控制何时显示输入视图,我们可以实现onEvaluateInputViewShown方法,该方法用来判断输入区域是否应该显示,在updateInputViewShown方法中会调用onEvaluateInputViewShown方法来判断是否显示输入区域.

onStartInputView()

输入视图正在显示并且编辑框输入已经获取焦点时回调该方法,onStartInputView方法总会在onStartInput,onConfigureWindow()方法之后被调用.一般情况下普通的设置可以在onStartInput方法中进行,在onStartInputView方法中进行视图相关的设置,开发者应该保证onCreateInputView方法在该方法被调用之前调用.

onStartCandidiateView()

候选视图正在显示时回调该方法,必须确保候选区域的资源已经初始化过了.一般情况普通的设置可以在onStartInput方法中进行,在onStartCandidatesView方法中进行视图相关的设置,开发者应该保证onCreateCandidatesView方法在该方法被调用之前调用。

onWindowShown()

在onstartinputview方法之后调用,调用该方法时,表示整个输入法是可见的.

hideWindow()

当输入法window失去焦点时调用该方法.

onWindowHidden()

当视图有可见转换为不可见时,调用该方法.一般跟onWindowShown配合使用。

onFinishCandidatesView()

当候选词视图即将被隐藏或者切换到另外的编辑框时调用该方法,finishingInput为true,onFinishInput方法会接着被调用.

onFinishInputView()

当候选词视图即将被隐藏或者切换到另外的编辑框时调用该方法,finishingInput为true,onFinishInput方法会接着被调用.

onFinishInput()

往往在onFinishInputView之后调用,后续可能会接着调用onStartInput方法,或者处于闲置状态,在使用输入法过程中会频繁的调用.

onUnbindInput()

与绑定的客户端失去联系时,会调用该方法.

onDestory()

输入法服务结束时调用.只调用一次.再次方法中做好资源释放的工作

了解输入法生命周期有利于我们在合适的时机去初始化相对应的逻辑,这是自己构建一个输入法程序不可缺少的一部分。

最后

如果你看到了这里,觉得文章写得不错就给个赞呗!欢迎大家评论讨论!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足,定期免费分享技术干货。谢谢!

输入法(InputMethodService)生命周期解读相关推荐

  1. 神策数据杨宁:券商财富管理数字化转型客户全生命周期解读

    收入下滑.客户增长红利消失,中国证券业进入转型期.历时三个月,我们对市面上 49 家大中型券商进行了深度调研,本文根据<财富管理数字化转型现状与趋势洞察报告>系列解读课 1 中神策数据业务 ...

  2. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  3. ML:MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型—业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护》解读

    ML:MLOps系列讲解之<CRISP-ML (Q)ML生命周期过程-了解机器学习开发的标准过程模型-业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护& ...

  4. ML:MLOps系列讲解之《端到端 ML工作流生命周期》解读

    ML:MLOps系列讲解之<端到端 ML工作流生命周期>解读 导读:在本节中,我们对基于机器学习的软件开发的典型工作流程进行了高级概述. 目录 3.<端到端 ML工作流生命周期> ...

  5. Vue 生命周期钩子解读

    文章目录 vue 生命周期钩子 声明周期图示解析 生命周期钩子函数 beforeCreate #created #beforeMount #mounted #beforeUpdate #updated ...

  6. vue hot true 不起作用_从源码解读 Vuex 注入 Vue 生命周期的过程

    第一篇文章我会结合 Vue 和 Vuex 的部分源码,来说明 Vuex 注入 Vue 生命周期的过程. 说到源码,其实没有想象的那么难.也和我们平时写业务代码差不多,都是方法的调用.但是源码的调用树会 ...

  7. Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02

    文章目录 Pre 通俗流程 finishBeanFactoryInitialization Pre Spring5源码 - 06 Spring Bean 生命周期流程 概述 01 接上文 通俗流程 下 ...

  8. 第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

    特别说明:  在上一遍文章中有详细的叙述Receiver启动的过程,如果不清楚的朋友,请您查看上一篇博客,这里我们就基于上篇的结论,继续往下说. 博文的目标是:  Spark Streaming在接收 ...

  9. 几种常用的软件生命周期模型与敏捷开发解读

    瀑布式开发和敏捷开发,看过软件工程相关的书籍的同学,对瀑布模型,增量模型 ,喷泉模型,W模型,V模型以及H模型都是知道一些的,那么现在提到更多的敏捷开发它们之间有什么不同和适用的范围,是否敏捷开发适用 ...

最新文章

  1. java常用的集合对象_java常用实体类、集合类
  2. Binder Driver浅析:Binder线程池
  3. ubuntu中wifi显示被硬件禁用的解决方法
  4. SQL How to get the current day month and year
  5. JVM----Java内存区域
  6. Netty原理二:NioEventLoop 如何启动监听事件
  7. python 中的[::-1]
  8. 解决方案 | python安装wordfreq库
  9. 近期机器学习竞赛汇总~总奖池超三百万人民币!
  10. iPhone SE 3钢化膜已上架海外市场:4.7英寸屏 Home键得到保留
  11. OpenShift 4 之在不同的项目之间推送Image
  12. 洛谷P4121 [WC2005]双面棋盘(线段树套并查集)
  13. 返回路径平面上的间隙_PCB EMC问题:最常见的返回路径不连续
  14. AlphaGo Zero算法简介
  15. ppt背景图片计算机教学知识,数学课件ppt背景图片
  16. matlab 龙格库塔求解隐式方程,Matlab龙格库塔求解方程组问题
  17. 利用计算机指令清理垃圾,Win7电脑清理垃圾的运行命令代码是什么?
  18. 微云网页版服务器繁忙,腾讯微云传输速度慢的几种原因及解决方法
  19. 如何快速删除CSV、Excel、Markdown表格的重复行?
  20. win7 打开“计算机”慢,怎么解决win7开机慢|win7系统开机速度慢的三大解决方法...

热门文章

  1. Cass7.0使用的感受
  2. python 使用django基本步骤和示例
  3. uniapp 打包之后,部分安卓手机不能安装提示“解析软件包时出现问题”
  4. android button自动点击事件,Android Button按钮的四种点击事件
  5. 商机 | 大数据/政务云采购清单 招标12起,最高招标价为2037.5万(11.8-11.10)
  6. 十行代码写个彩票随机生成器(双色球+大乐透)
  7. Arduino - pH传感器
  8. ping命令检查网络故障
  9. android 噪音测试,分贝噪音测试下载-分贝噪音测试 安卓版v1.2.5-PC6安卓网
  10. 我感到很疲倦,非常疲倦