[解決済み] always android:configChanges="keyboardHidden|orientation" ではダメなのでしょうか?
質問
なぜ
android:configChanges="keyboardHidden|orientation"
は、すべての(ほとんどすべての ;)活動で使用されていますか?
グッズです。
- アクティビティがローテーションされる心配はありません。
- より高速に
あまりよろしくない。
- 画面サイズに依存するレイアウトの場合、レイアウトを変更する必要がある(例:2列のレイアウトなど)
悪い点
- 異なる方向で異なるレイアウトにする柔軟な方法はありません。
- フラグメントを使用する場合、あまり良くない
でも、レイアウトを使い分けないのなら、いいんじゃない?
解決方法は?
クイックバックグラウンド
Androidでは、デフォルトで、特定の重要な設定変更(一般的な例としては向きの変更)が発生した場合、その変更に適応できるように、実行中のアクティビティを完全に再起動します。
を定義すると
android:configChanges="keyboardHidden|orientation"
キーボードが引き出されたとき、または電話が回転したときにデフォルトのリセットを実行しないでください。はい、わかっています"。
これは良いことなのでしょうか?すぐにわかることです。
心配ないですか?
あることが、まず一つの長所です。
<ブロッククオートアクティビティがローテーションされる心配はありません。
多くの場合、向きの変更("rotation")によって発生しているエラーがある場合、それを単純に修正できると誤解しています。
android:configChanges="keyboardHidden|orientation"
.
しかし、android:configChanges="keyboardHidden|orientation"は、ただの応急処置に過ぎない。実際には、設定変更のトリガーとなり得る方法はたくさんあります。例えば、ユーザーが新しい言語を選択した場合(つまり、ロケールが変更された)、アクティビティは方向性の変更によって行うのと同じ方法で再開されるでしょう。必要であれば、次のように表示することができます。 設定変更の種類別リスト .
Edit : より重要なことは、しかし、として ハクビシン コメントで指摘されているように、アプリがバックグラウンドにあるとき、Androidがアプリを終了させてメモリを解放することを決定すると、アクティビティも再開されます。ユーザーがアプリに戻ってきたとき、Androidは、他の設定変更があった場合と同じように、アクティビティを再開しようとします。このような事態に対処できなければ、ユーザーは満足しないでしょう。
つまり
android:configChanges="keyboardHidden|orientation"
正しい方法は、アクティビティをコーディングして、Android が投げかけるどんな再起動にも満足できるようにすることです。これは将来的に役立つ良い習慣ですので、慣れておいてください。
では、どんな時に使えばいいのでしょうか?
おっしゃるとおり、明確な利点があります。ローテーションのデフォルトの設定変更を自分で処理することによって上書きすることで、スピードアップを図ることができます。しかし、このスピードには利便性という代償が伴います。
簡単に言うと、縦長と横長で同じレイアウトを使うなら、上書きをした方が調子がいいんです。アクティビティの本格的な再読み込みの代わりに、ビューが残りのスペースを埋めるために移動するだけです。
しかし デバイスが横向きのときに何らかの理由で別のレイアウトを使用する場合、Android がアクティビティを再読み込みするのは、正しいレイアウトを読み込むという意味で良いことです。[このようなActivityでオーバーライドを使用し、実行時に魔法のような再レイアウトを行いたい場合、幸運を祈ります - それは単純とは程遠いものです]。
簡単なまとめ
ぜひとも、もし
android:configChanges="keyboardHidden|orientation"
が正しいのであれば、それを使えばいいのです。しかし
プリーズ
方向が変わるだけで、アクティビティが再起動するわけではありませんので、何かが変わったときに何が起こるかを必ずテストしてください。
関連
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
エラーが発生しました。ArrayAdapter は、リソース ID が TextView である必要があります。
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
view.getRootView()の本当の意味とテストについて
-
アンドロイドの遅延実行のいくつかの方法
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
[解決済み] なぜフラグメントなのか、そしてアクティビティの代わりにフラグメントを使用するのはどんなときか?
-
[解決済み] アンドロイドで画面サイズごとにdimens.xmlを定義するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
NetworkOnMainThreadException
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
アンドロイドスタジオのエラーを解決する --> Error:(1, 0) id 'com.android.application' を持つプラグインが見つかりません。
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない