Edited at

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


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

最近記事を書いていなかったので、自分のメモブログから一本投稿。古いネタですけど。


Androidは画面を回転させるとActivityを再描画する

Androidは画面を回転させた際に画面の再描画が走ります。

Activityが再起動するわけなのですが、ダイアログなどを出してる途中でActivityの再起動が走るとWindow leek Exceptionが起こってしまい、アプリがクラッシュしてしまいます。

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


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 画面回転時にActivityを再起動させない方法