Android: 端末の回転時にActivityを再起動させない方法

Android端末がの画面の向きが変わったときに、Activityが再起動してしまう。これは、アプリの整合性を保つ為には必要であるらしいのですが、現在自分が作っているアプリケーションにとっては問題あり。最初はonDestroyが走る前に状態を保存して再起動したときに状態を復元するように作成するのが正しいのかなと思っていたのですが、本を見ていたら、簡単に解決する方法を見つけました。Activityの再起動自体をさせない方法です。

  1. ActivityにonConfigurationChangedメソッドを実装
  2. マニフェストファイルのActivityの定義に、android:configChanges属性を追加

コンフィグが変わったことを検知して呼ばれるメソッドを実装。
今回は、端末の回転のみ検知するようにしてあります。(後のマニフェストにて)

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  Log.v("TEST", "onConfigrationChanged was called!!");
}

マニフェスト側で、configChangesにorientationを指定。これで回転のみを対象とします。

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

これで、端末の向きを変えてもActivityが再起動しません!!

Androidアプリを開発するには、この本が一番内容が充実していますね。会社にはあるんだけど、実は個人ではまだ買ってない…。


タグ Android, Java | パーマリンク.

コメント・トラックバック一覧

  1. よし says:

    こんにちはいつも拝見されていただいています。
    Activityの再起動についての内容でしたので、よろしければ質問させてください。Activityを意図的に再起動させる方法はあるのでしょうか?

    たとえば、Activity内で設定を変更し、これを有効にしたいために再起動させたいのですが、、。

  2. よしさん

    Activity内で設定を変更してそれを反映させたいのならば、再起動させるというやり方自体が問題ありだと思います。
    設定が変更されたタイミングで(例えば保存ボタンを押すなど)、設定を書き換えるメソッド準備しとけばいいのではないでしょうか?
    もしくはPreferenceActivityを設けて、戻ったタイミング(onResumeなど)で設定を書き換えるなど。

    起動しているActivityで自身を再起動というのはよくないと思います。まぁやろうと思えば、startActivityを自分自身に行って、直後でfinishすれば、新しいActivityができているだろうから、再起動といえなくもないかなとは思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です