ご存知のように、ユーザーがポートレート モードとランドスケープ モードを切り替えると、android はアクティビティを破棄して再起動しますが、これはonConfigurationChanged()
コールバックをオーバーライドすることで防ぐことができます。システムがアクティビティを破棄して開始するために実際に何が必要なのか、誰か説明してもらえますか? オーバーライドすると副作用はありますonConfigurationChanged()
か?
2 に答える
この動作は非常に強力ですが、アプリケーションは実行時にデバイスの構成に自動的に適応するため、アクティビティが破棄されて再作成される理由を知りたがる新しい Android 開発者を混乱させることがあります。この「問題」に直面して、一部の開発者は構成の変更を自分で処理することを選択します。これは、私の意見では、他のデバイスが登場したり、アプリケーションがより複雑になったりしたときに、自分たちの生活を複雑にする短期的な解決策です。自動リソース処理は、アプリケーションのユーザー インターフェイスをさまざまなデバイスやデバイス構成に適合させるための非常に効率的で簡単な方法です。ただし、価格がかかることもあります。
参照: http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html
アクティビティを再起動する主な目的は、Android が新しい画面の向きに適応するためにレイアウトやリソースなどを変更する必要があるためです。ご存知かもしれませんが、各オリエンテーションには (通常) 独自のApplication Resourcesがあります。Android の設計者は、リソースを変更する際に非常に多くの作業をやり直す必要があるため、単にアクティビティを再起動するのが最善であると判断しました。
これは、Honeycomb がFragmentの登場とともに登場した後、特に重要です。向きによっては、まったく異なるフラグメントのセットと関連するデータのセットを表示できます。
オーバーライドしないことを強くお勧めしますonConfigurationChanged()
。代わりに、彼の回答で提供されているリンク HandlerExploit を読んでください。を使用して向きの変更をより効率的に処理する方法を示しますonRetainNonConfigurationInstance()
。