7

Androidでは、画面の向きが(横向きと縦向きの間で)変更されると、onCreateメソッドが呼び出されます。このメソッドは、適切に処理されない場合、結果が単純にレイアウトを変更し、同じ情報をすべて保持している場合に、アクティビティ全体を再作成します。

私はこれを解決するいくつかの方法を知っていますが、最も効率的な方法に興味があります。

1)メソッドをオーバーライドしonConfigurationChanged()て空のままにして、向きの変更を処理することをマニフェストに伝えます。

2)onSaveInstanceState()ここにデータを上書きして保存し、再入力しますonCreate()

onPause()3)データのバンドルを作成してに送信するオーバーライドonSaveInstanceState()

明らかに、これらはすべてオプションですが、どちらがより良い方法です(小、中、大量のデータ)

ありがとうございました

4

2 に答える 2

13

一部のデバイス構成は、実行時に変更される可能性があります(画面の向き、キーボードの可用性、言語など)。このような変更が発生すると、Androidは実行中のアクティビティを再開します(onDestroy()が呼び出され、その後に続きonCreate()ます)。

  • 再起動を適切に処理するには、アクティビティが通常のアクティビティライフサイクルを通じて以前の状態を復元することが重要です。このライフサイクルでは、AndroidがonSaveInstanceState()アクティビティを破棄する前に呼び出して、アプリケーションの状態に関するデータを保存できるようにします。onCreate()その後、または の間に状態を復元できますonRestoreInstanceState()

ただし、アプリケーションを再起動して大量のデータを復元すると、コストがかかり、ユーザーエクスペリエンスが低下する可能性があります。このような状況では、他に2つのオプションがあります。

  1. 構成の変更中にオブジェクトを保持する

    構成が変更されたときにアクティビティを再開できるようにしますが、ステートフルオブジェクトをアクティビティの新しいインスタンスに渡します。

  2. 構成変更を自分で処理する

    特定の構成変更中にシステムがアクティビティを再開しないようにしますが、構成が変更されたときにコールバックを受信するため、必要に応じてアクティビティを手動で更新できます。

したがって、データ操作とアプリケーションのユーザーエクスペリエンスの範囲に応じて、最適なものを選択できます。

編集:あなたの必要に応じて、レイアウトを変更するだけで、使用 onConfigurationChanged()して変更を加える必要があると思います。

于 2012-01-25T04:40:07.597 に答える
0
//by changing the orientation if your layout not disturb in design just data destroyed
 //then use the below attribute in manifest in activity you want to do


   android:configChanges="orientation|screenSize|layoutDirection"

//but your whole screen design disturb then turn off orientation by using this

  android:screenOrientation="portrait"
于 2021-03-26T07:37:25.480 に答える