ページ

2018/12/29

Android ナイトモードを起動時に設定するとonCreateが二度呼ばれる

|

シンプル単語帳にナイトモードを導入してほしいリクエストがあり、
確かにあったほうが良さそうだと思ったため実装している。
(現時点ではまだリリースしていない)

ただ、どうもアプリの起動が遅くなっているように見える。

各 Activity の onCreate でナイトモードを設定するような方法で実装。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (App.instance.nightModeEnabled) {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    }

デバッグしてみると、これが原因で onCreate が二回呼ばれてしまい初期画面の表示が遅くなっている模様。

ナイトモードが変更されたことによって再度 onCreate が呼び出されてしまっている。

onCreate が複数回呼び出されるというところでピンとくるべきだったが、
よく調べてみると設定変更のイベントによって発生しているのだった。

この設定変更が必要ないなら以下のようにすると解決するが、
今回のケースではナイトモードが反映されなくなってしまう。

 <activity android:name=".app.MainActivity"
     android:configChanges="uiMode">

というわけで、対象 Activity の onCreate をなるべく軽くしておくくらいしか対処はできなさそう。

0 件のコメント: