Androidで向き変更時にActivityを作り直さない

端末の向きによって画面が回転する場合など画面サイズが変わった場合Activityは一度破棄され新たに作り直される。

 

単純なActivityであれば向きを考える必要がなく便利なのかもしれないが、初期化だったり別スレッドを使ったりと複雑なことをしようした場合、Activityが作り直されるのは都合が悪い。

 

以下の方法で同じActivityインスタンスを使い続けることができる。

 

まずは、AndroidManifest.xmlに設定を書く。

activity要素の、android:configChanges属性を設定する。

(Activityの特定挙動を自前で実装するという意味みたい)

  • 画面回転時      =orientation
  • キーボードの引き出し時=keyboardHidden


詳細なリファレンスはこちら

http://developer.android.com/intl/ja/guide/topics/manifest/activity-element.html

 

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxxx.test">
    <application>
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name"
            android:configChanges="orientation|keyboardHidden">

                :

        </activity>
    </application>
</manifest>

続いてActivityのonConfigurationChangedメソッドをオーバーライドして、向きが変わった場合の処理を自前で実装してあげればOK。