Android 画面回転時にActivityを再起動させない方法

職場で教えてもらったので後学のために残します。

Androidは画面を回転させた際に画面の再描画が走ります。
Activityが再起動するわけなのですが、ダイアログなどを出してる途中でActivityの再起動が走るとWindow leek Exceptionが起こってしまい、アプリがクラッシュしてしまいます。

この画面回転時のActivityの再起動を防ぐ方法があります。

AndroidManifest.xmlで画面の再描画をさせたくないActivityに対して以下を加えます。

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:uiOptions="splitActionBarWhenNarrow"
            android:configChanges="orientation|screenSize"><!--←コレ-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

これを書くことによってonDestroy→onCreateの代わりに、Activity#onConfigurationChanged() が呼ばれるようになります。
画面回転時に何か処理をさせたい場合はここにその処理を書くようです。

@Override
public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);
   Log.d("TEST", "onConfigrationChanged()");
}

画面の再描画を防ぐだけなら↑は必要ないです。

画面の再描画を防ぐなら

android:configChanges="orientation|screenSize"

覚えておきます。

参考
しまのブログ Android 画面回転時にActivity再起動がかからないようにする方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です