hyoromoのブログ

iOS/AndroidもしくはCocos2dxネタを書いています

画面の向きを切り替えた時の問題

Android 端末では、縦向きと横向きの2種類の表示方法があります。
アプリ起動中にも縦と横とで切り替えができるのですが、縦を横にしたとき画面情報が消える問題が発生しました。
今回はこの原因と解決方法を説明します。

画面の向きを切り替えたときの処理手順

sHK6UFJs20Y-SWKSyHBIP0w(2)
画面向きを変更した場合、[実行中] → [一時停止] → [破棄] まで進んでから画面の向きが変更されます。
変更された画面は、[起動] → [実行中] まで進む訳ですが。オブジェクトが破棄されたため、画面切り替え以前のオブジェクト情報が全て初期かされています。

オブジェクト情報の初期化を回避する手順

再起動させなければいいので、onConfigurationChanged() メソッドをオーバーライドさせます。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    	super.onConfigurationChanged(newConfig);
    }

また、AndroidManifest.xml ファイルを以下のように android:configChanges 属性を追記します。

<activity android:name=".ProjectName"
           android:label="@string/app_name"
           android:configChanges="orientation|keyboardHidden">

これにより、画面向きを変更したときに [破棄] → [起動] の流れが無くなり、代わりにオーバーライドしたメソッドが呼ばれるようになります。

まとめ

これで画面内容が消える問題も解決できました。Android 側での内部処理を十分理解してないとハマってしまいますね。

参考書籍

初めてのAndroid

初めてのAndroid

Google Androidプログラミング入門

Google Androidプログラミング入門

とても参考になりました、著者の方々どうもありがとうございました。