2011年04月14日

画面回転時、再描画を防ぐには

Developerサイトから


When a configuration change occurs at runtime, the activity is shut down and restarted by default,

デフォルトでは、設定が変更されたら(画面回転や、locale変更、キーボードタイプ変更など)、Activityはシャットダウンして、再起動します。

but declaring a configuration with this attribute will prevent the activity from being restarted.

android:configChangesを設定することで、Activityが再起動されるのを防ぎます。

Instead, the activity remains running and its onConfigurationChanged() method is called.

android:configChangesを設定して、設定変更(画面回転や、locale変更、キーボードタイプ変更など)すると、Activityは起動したままとなり、onConfigurationChanged()メソッドが呼ばれます。


画面回転時、再描画を防ぐには


AndroidManifest.xmlに下記赤文字の箇所を追加する。

<activity android:name=".<アクティビティ名>"
          android:label="@string/app_name" 
     android:configChanges="orientation"
>

orientation:画面回転時

備考


上記の設定して、onConfigurationChanged()メソッドが本当に呼ばれるのか確認しようとして、Activityに

public void onConfigurationChanged(Configuration newConfig){
    Log.d("test","onConfigurationChanged");
}

を追加して実行すると、画面回転時に強制終了してしまった。とりあえずLogCatをみると、

E/AndroidRuntime(28828): android.app.SuperNotCalledException: Activity
 <アクティビティ名> did not call through to super.onConfigurationChanged()

と出てた。super.onConfigurationChanged()が呼ばれなかった?じゃぁ、

public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
    Log.d("test","onConfigurationChanged");
}

として実行してみたら、強制終了しないでくれた。

androidソースを見てみると、それらしい記述がある。

frameworks\base\core\java\android\app\ActivityThread.java
performConfigurationChanged内
throw new SuperNotCalledException(
        "Activity " + activity.getLocalClassName() +
    " did not call through to super.onConfigurationChanged()");

あってそうかなということで一件落着。


参考


<activity> | Android Developers



posted by やし at 00:33 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。