簡単な背景
デフォルトでは、Androidで特定の主要な構成変更が発生すると(一般的な例は方向の変更です)、Androidは実行中のアクティビティを完全に再起動して、そのような変更に適応できるようにします。
android:configChanges="keyboardHidden|orientation"
AndroidManifestで定義するときは、Androidに次のように伝えます。「キーボードが引き出されたとき、または電話が回転したときにデフォルトのリセットを行わないでください。これを自分で処理したいのです。そうです。 」
これは良いことですか?すぐに...
心配ない?
あなたが最初に始める長所の1つは、
あなたの活動がローテーションされることを心配する必要はありません
多くの場合、向きの変更(「回転」)によって生成されるエラーがある場合、を挿入するだけで簡単に修正できると誤って信じていますandroid:configChanges="keyboardHidden|orientation"
。
ただし、android:configChanges = "keyboardHidden | orientation"は、絆創膏にすぎません。実際には、構成の変更をトリガーする方法はたくさんあります。たとえば、ユーザーが新しい言語を選択した場合(つまり、ロケールが変更された場合)、方向の変更と同じ方法でアクティビティが再開されます。必要に応じて、すべての異なるタイプの構成変更のリストを表示できます。
編集:さらに重要なことに、ハックボッドがコメントで指摘しているように、アプリがバックグラウンドにあり、Androidがメモリを解放してメモリを解放することを決定した場合にも、アクティビティが再開されます。ユーザーがアプリに戻ると、Androidは他の構成変更があった場合と同じようにアクティビティを再開しようとします。それを処理できない場合-ユーザーは満足できません...
つまり、android:configChanges="keyboardHidden|orientation"
「心配」の解決策にはなりません。適切な方法は、Androidがスローする再起動に満足できるようにアクティビティをコーディングすることです。これは、道を進むときに役立つ良い習慣なので、慣れます。
それで、いつそれを使うべきですか?
あなたが述べたように、明確な利点があります。ローテーションのデフォルトの構成変更を自分で処理して上書きすると、処理が速くなります。ただし、この速度には利便性の代償が伴います。
簡単に言うと、縦長と横長の両方に同じレイアウトを使用している場合は、上書きを行うことで適切な状態になります。アクティビティを本格的にリロードする代わりに、ビューは単純にシフトして残りのスペースを埋めます。
ただし、デバイスが横向きのときに何らかの理由で別のレイアウトを使用する場合、Androidがアクティビティをリロードすると、正しいレイアウトが読み込まれるので問題ありません。[そのようなアクティビティでオーバーライドを使用し、実行時に魔法のような再レイアウトを実行したい場合...まあ、幸運-それは単純ではありません]
簡単なまとめ
ぜひ、android:configChanges="keyboardHidden|orientation"
あなたに合っているなら、それを使ってください。しかしPLEASE姿勢の変化がフル活動再開をトリガすることができる唯一の方法ではありませんので、ときに何かが変化し、何が起こるかテストしてください。