iOS 平台第三方输入法的生命周期到底是怎样的?

我们刚刚讨论了 macOS 平台第三方输入法的生命周期到底是怎样的?,现在趁热再来聊聊 iOS 平台的第三方键盘生命周期

在苹果官网,也就只有个这:

苹果对第三方键盘的生命周期无任何描述

苹果对第三方键盘的生命周期无任何描述

这看起来似乎很容易理解,键盘的生命周期是系统管理的,每次用户呼出键盘,就它就启动,用户收起键盘,过一会它就被消灭了。

但有了前文对 macOS 输入法框架的生命周期的经验,我们再来看 iOS,真的是这样吗?在苹果开发者文档相关页面的最末尾:

  • Keep in mind that dismissing the keyboard won’t necessarily terminate the keyboard extension process. Don’t assume the system releases memory your keyboard is using when it is no longer visible on screen.

这段不知道什么时候加上去的说明表示:收起键盘并不一定就会结束键盘的进程……所以扩展+后台这两个属性导致你的键盘进程极其容易被系统当作垃圾干掉,显然这样会触发一个莫名其妙的崩溃记录……

 

总之,有了 macOS 输入法生命周期的经验,我们可以知道 iOS 的处理没差多少——系统会在第一次弹出键盘时启动第三方键盘的进程,然后这个进程就全程在后台运行了(别想的太美,反正键盘没弹出,绝大多数API是无效的就是了),当用户焦点在输入框时,就会弹出键盘,即初始化一个 Controller,与 macOS 不同的是,这里没有 InputSession 了,每次弹出键盘,都会初始化一个新的 Controller,与具体在哪个 App 中并无关系。

——如果键盘崩溃了呢?这一点和 macOS 一样,立即重启,如果连续崩溃,则退回到一个系统自带的备用键盘,保证用户体验。

长久以来,我同样以为只有一个 Controller,运用了大量全局变量,显然,我们不可能同时显示两个键盘并给不同的输入框同时输入,这就造成了在一些极端情况下 Controller 找错了等奇怪的 Bug。并一直以为是 Xcode Debug 的 Bug 导致真机编译时不会自动结束键盘进程。

总之,了解这个生命周期后,就可以更好的安排内存,并在后台做一些内存方面的处理,确保长时间不用的键盘进程不会被系统当作垃圾干掉了。

 

本文由 落格博客 原创撰写:落格博客 » iOS 平台第三方输入法的生命周期到底是怎样的?

转载请保留出处和原文链接:https://www.logcg.com/archives/3569.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注