余談
(お急ぎの方はまとめまで飛ばしてください。)
目を疑った。
今、目の前で、android:screenOrientation
を指定して画面回転を抑制しているActivityの画面回転が起きている。私は絶望に打ちひしがれながら、画面を回転させ続けた。
そもそもなぜこんな事になったのか?
ことの始まりは、targetSdkVersionを29にあげる上での調査だった。
https://developer.android.com/about/versions/10/behavior-changes-10?hl=ja
このドキュメントの中に 折りたたみ式のサポート
の項目がある。項目の中で 画面分割
についても触れられていた。
画面分割の機能は知っていたものの、個人端末がiPhoneなためほとんど利用していなかった。だからこれを期に、折りたたみと画面分割時の挙動を見てみることにしたのだ。その後に何が待ち受けているかも知らず・・・・
画面分割はAndroid7以降の端末であればどれでも利用できるため、すでにインストール済みのエミュレータで良かった。だが折りたたみについては、Foldableのエミュレータをインストールする必要がある。(Android Studio 3.5であれば利用可能)
インストールが終わり、私はエミュの画面をパキパキさせ始めた。
うん、実に可愛らしい挙動だ。折りたたみの度に伸びたり縮んだりするさまは見ていてとても癒やされる。
パキパキしながら私はあることに気づいた。
アクティビティが再生成されている?
私は頭を抱えた。というのも、最近参画したプロジェクトのアプリは画面縦固定で、アクティビティの再生性を考えていない画面があってもおかしくない状況だったからだ。
ひとまず冷静になろう。私は自分に言い聞かせ、画面を分割した。
なんだと・・・?
今、アクティビティが再生成されなかったか?画面を分割しただけで!?
私は思わずonCreateの直後にブレークポイントを貼った。そしてすぐさまデバッグをかける。ビルドの時間が待ち遠しい。
ようやくビルドが終わり、画面を分割する。
やはり再生性されている。そして私はおもむろに、分割された画面をリサイズした。
半ば予想通りではあったが、ここでもアクティビティが再生成された。そこで私の頭の中に、ろくでもない考えが浮かんだ。
この分割された画面を横にしたら、片方だけが回転するのか?
考えを浮かべながら、私はゆっくりと画面を横に向ける。
目を疑った。
今、目の前で、android:screenOrientation
を指定して画面回転を抑制しているActivityの画面回転が起きている。私は絶望に打ちひしがれながら、画面を回転させ続けた。
まとめ
下記の状況ではアプリの設定関係なくアクティビティの再生性が起こります。
- 画面分割時
- 画面分割リサイズ時
- 画面分割中の画面回転時(正方形の画面を除く)
- 折りたたみ端末の折りたたみ時
Android10で公式の折りたたみサポートが始まりました。これからこれらの状況が増えていくことを考えると、未対策アプリは今のうちにどうするか考えておくのが良さそうです。