2012/11/20

configChanges=”orientation” を指定しているのに回転時に Activity が再生成される!?

Android の Activity は回転時に再生成されるという事実は、かなり有名だと思います。
そして、AndroidManifest.xml に android:configChanges="orientation" を記述しておくと、再生成を抑制してくれるというのも結構有名だと思います。
参考: Handling Runtime Changes | Android Developers
<activity android:name=".MyActivity"
          android:configChanges="orientation"
          android:label="@string/app_name">

ところが、我が家の Nexus7 では、上記のように設定しているのにも関わらず、回転すると Activity が再生成されてしまいます。
おかしいなぁ、と思って調べたところ、以下のサイトに情報が。

Kiroru Official Blog : onConfigurationChanged が呼ばれない!

「minSdkVersion か targetSdkVersion で 13以上の数字を設定している場合は、 orientation の他に screenSize も指定するように」とのことです。


しかし、よく見てみたら Handling Runtime Changes | Android Developers に書いてあったのね…
以前、読んだことがあるからと言って、読み飛ばしてしまったのが失敗でした。



ところで、この「回転時に再生成される仕様」って、Activity は長いこと放置されても(つまり、Destroy されても)、同じ状態に復活すべき。という発想から来てるんだと思います。
そう設計されているものは、一度削除してから生成しなおしても問題ないはずだと。

しかし、実際は、長い間放置された場合はホーム画面に戻る方が良いけど、回転時は現状を維持して欲しい。みたいなケースがあるわけです。
そういう場合には、configChanges を使用するのは有効です。

が、安易に使用すると、ちょっと他のアプリを起動していたら初期化されてしまうという問題につながるので、気を付けた方が良いかもしれません。

0 件のコメント: