2月 17
最初に ICS 開発でのハマりポイントの紹介です。私はこれで1晩悩みました。(^^;

過去のエントリ『プログレスダイアログから処理を中断する。』の中で、端末の向きを変更した場合に onCreate が走るのを避けたい場合、AndroidManifest.xml の中で android:configChanges=”orientation” を指定すると onCreate の代わりに onConfigurationChanged が走りますよ!と紹介しています。

ICS で開発において同じようにしたのですが onConfigurationChanged がどうしても呼ばれません。コードをいろいろ変更して切り分けたところ android:targetSdkVersion を Android 3.2 (API Level 13) 以降で動作するように設定した場合、onConfigurationChanged が呼ばれなくなることが分かりました。理由は Android Developers の API リファレンスにズバリ記載されてました。


Caution: Beginning with Android 3.2 (API level 13), the “screen size” also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the “screenSize” value in addition to the “orientation” value. That is, you must decalare android:configChanges=”orientation|screenSize”. However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).


要するに Android 3.2 からは android:configChanges=”orientation” とするだけではダメで、新たに追加された screenSize も一緒に指定してねということのようです。

こんな感じで。

 <activity android:name=".Main"
     android:configChanges="orientation|screenSize">

android:configChanges=”orientation|screenSize” を AndroidManifest.xml の中で指定するとちゃんと onConfigurationChanged が呼ばれるようになりました。めでたしめでたし (^^

では!



Posted by sak+

Comments are closed.

preload preload preload