2011/12/28

Android3.2以降、画面回転で意図せずActivityが再起動してしまう

orientationのconfigChangedを受け取っているのに画面回転させるとActivity
が再起動されてしまう問題に悩まされたので覚書。

HoneyComb MR2(Android3.2)以降、画面回転時にSCREEN_SIZEのconfigChangeも
走るようになりました。

参考:Android Developerサイト

これにより、AndroidManifestで
 android:configChanges=orientation
としただけでは不十分となりました。

画面回転時の再起動を防ぎたい場合は
 android:configChanges=orientation|screenSize
とする必要があります。(※端末形状によってはkeyboardHiddenも必要)

実際にソースコードを組んで確認してみます。
@Override
protected void onDestroy() {
    super.onDestroy();
    int change = getChangingConfigurations();
    android.util.Log.e("yuki" , "yuki c=" + String.format("0x%08x", change));
    // CONFIG_SCREEN_SIZE 0x000004
    // CONFIG_ORIENTATION 0x0000008
}
結果は 
 yuki c=0x00000480
となります。(CONFIG_SCREEN_SIZE|CONFIG_ORIENTATION)

以上です。