アプリを切り替えるとiPhoneのキーボードの状態が戻るのはなぜか
キーボードが閉じるたびに拡張は終了させられるので、メモリ上にだけ持っていたものは一緒に消えます。同じ仕組みが、入力していない間キーボードが何のコストも生まない理由にもなっています。
キーボードが画面から消えるたびに、キーボード拡張そのものが終了させられているからです。そのときメモリ上に持っていたものは、すべて一緒に消えます。
キーボードが閉じるとプロセスは終了する
iOSは入力欄がキーボードを要求した時点でキーボード拡張を起動し、キーボードが閉じた時点で終了させます。Appを切り替える、入力欄から離れる、メッセージを送信する、下にスワイプして隠す、どれも同じです。Appスイッチャーに並ぶAppのようにバックグラウンドで一時停止しているわけではなく、次に入力欄をタップするまで存在しなくなります。
したがって次に現れるキーボードは、前回から何も受け継いでいない新しいインスタンスです。前のインスタンスがメモリ上にだけ持っていたものはどこにも書き出されておらず、読み戻せるものは残っていません。実際に「消えた」と感じられるのは次のような状態です。
- 有効にしていたShiftやCaps Lock。
- 開いていた絵文字や顔文字のタブと、その中でのスクロール位置。
- その一通のためだけに切り替えていた装飾文字などのモード。
- 設定パネルや記号のページを開いたまま離れたときの、その表示状態。
- キーボード自身の画面の中に打ちかけて、まだ確定していなかった内容。
設定が残り、画面の状態が残らない理由
違いは運ではなく保存先です。テーマ、打鍵音、ライティング、有効にしている言語、音と触覚のスイッチといった設定は、変更したその瞬間にキーボードとApp本体が共有する保存領域へ書き込まれます。新しいインスタンスは起動時にそれを読み戻すので、見た目も音も一秒前と同じになります。
一時的な画面の状態は、既定ではメモリ上にあるだけで、開発側が保存する価値があると判断しない限りそのままです。これは見落としではなく判断で、何もかも引き継げばよいというものでもありません。テーマは当然引き継ぐべきですが、Caps Lockはおそらく引き継ぐべきではありません。三時間後に開いたら大文字のまま固定されていた、というほうが困るからです。
iOSが拡張の内部状態を復元してくれることは、事実上ありません。その代わりに毎回渡してくれるのが入力欄自身の文脈です。カーソル周辺のテキスト、キーボードの種類、Returnキーの表示、自動大文字化の設定などがこれに当たります。記憶を持たずに起動したばかりのキーボードでも英字入力で文の先頭が大文字になるのは、その挙動が入力欄から来ているからです。
同じ仕組みがキーボードを軽くしている
アプリを切り替えても状態を保ち続けるキーボードとは、入力していない間も動き続けているキーボードのことです。その重さは端末全体が負担することになります。
- バックグラウンドでの実行がありません。入力していない間は動いていないので、その間に電池を消費することもありません。
- キーボードが隠れた瞬間にメモリはシステムへ返されます。拡張に与えられる枠がもともと小さいことを考えれば、小さくない意味を持ちます。
- セッションとセッションの間、キーボードは何も観測できません。観測する主体となるプロセスが存在しないからです。プライバシー上の境界と電池の挙動は同じ設計から出ています。
- その代償が、最初に表示されるときの起動時間と、保存を選ばなかった状態の消失です。
残るはずのもの、たとえば言語の選択やテーマが残らないのであれば報告する価値があります。一方、Appを離れたときにCaps Lockが外れるのは設計どおりです。
よくある質問
アプリを切り替えるとCaps Lockが解除されるのはなぜですか。
キーボードが閉じた時点で拡張が終了させられるためです。Shiftの状態は保存されずメモリ上にあるだけなので、次に起動したインスタンスは入力欄側の大文字化のルールから始まります。
設定は残るのに絵文字のタブが戻るのはなぜですか。
設定は変更した時点で共有の保存領域へ書き込まれ、起動時に読み戻されます。開いていたタブやスクロール位置は一時的な画面状態で、意図して保存されていない限りプロセスと一緒に消えます。
キーボードはメッセージとメッセージの間もバックグラウンドで動いていますか。
動いていません。iOSは入力欄が必要としたときに拡張を起動し、キーボードが隠れた時点で終了させます。入力していない間に電池を使わないのはこのためです。
テーマもリセットされてしまうということですか。
そうはならないはずです。テーマは一時的な状態ではなく保存された設定なので、起動するたびに読み戻されます。実際に固定されないのであれば、それは仕組みではなく不具合です。
自分のキーボードで試す
Kiboは、本物のメカニカルキー音とテーマ、RGBバックライト効果を備えたiPhone向けの無料カスタムキーボードです。アカウント登録も広告もなく、フルアクセスをオフにしたままでも使えます。