3

私はこれを理解するためにガガに行ってきました。
Orientation Change で多くのことを読んだことがありますが、Android はアクティビティを強制終了し、新しいアクティビティとして開始しonSaveInstanceState()ますonCreate()

しかし、私のアクティビティはさまざまな時間にさまざまな種類のネットワーク アクティビティを実行します。ネットワーク アクティビティが実行されているときに方向が変更された場合、さまざまな複雑なシナリオを処理する必要があります。

すべてのデータを自動的に保存して再利用するように、方向が変更されたときにこのアクティビティをまったく再描画する必要がないことを Android に指示する簡単な方法はありますか?

みたいなことってあるのかな。

4

8 に答える 8

11

android:configChanges="orientation"はい、ファイル内のアクティビティ宣言に属性を追加できAndroidManifest.xmlます。

EDIT :android:configChanges属性の目的は、本当に必要なときにアクティビティが再作成されるのを防ぐことです。たとえば、向きの変更が発生したときにカメラのプレビュー画面を再作成してはならないため、カメラ アプリケーションはこの属性を使用します。ユーザーは、デバイスを回転させてもカメラのプレビューが遅延なく機能することを期待しており、カメラの初期化はそれほど高速なプロセスではありません。つまり、向きの変更を手動で処理するのは、カメラ アプリケーションのネイティブな動作のようなものです。

ほとんどのアプリケーションでは、向きの変更中にアクティビティが再作成されるかどうかは問題ではありません。ただし、アクティビティの作成が遅い、アクティビティによって実行される非同期タスク、またはその他の理由により、このプロセス中にアクティビティを永続化する方が便利な場合があります。この場合、アプリケーションを少し調整してandroid:configChanges="orientation"属性を使用することができます。しかし、この調整を使用する際に理解しておくべき本当に重要なことは、状態を適切に保存および復元するためのメソッドを実装する必要があるということです!

したがって、この答えを要約するandroid:configChangesと、アプリケーションのパフォーマンスを向上させたり、まれに「ネイティブに」動作させたりすることはできますが、記述しなければならないコードの量は減りません。

于 2011-05-09T07:01:49.067 に答える
6

しかし、私のアクティビティは、さまざまな時間にさまざまな種類のネットワーク アクティビティを実行します。ネットワーク アクティビティの実行中に方向が変更された場合、さまざまな複雑なシナリオを処理する必要があります。

次に、そのロジックをアクティビティからサービスに移動します。

于 2011-05-09T10:40:45.603 に答える
4

はい、属性 android:configChanges="orientation" を AndroidManifest.xml ファイルのアクティビティ宣言に追加できます。

私見、宣言する方が良い android:configChanges="orientation|keyboard|keyboardHidden"

別の回答でリンクを提供したブログ投稿について。ここに答えがあると思います:

特定の構成変更中にアプリケーションがリソースを更新する必要がなく、アクティビティの再起動を回避する必要があるパフォーマンス制限がある場合は、アクティビティが構成変更自体を処理することを宣言できます。これにより、システムが再起動するのを防ぐことができます。アクティビティ。

この問題について、Android 開発者とも話しました。そして、彼はフォローすることを意味しました。横向きと縦向きで異なるレイアウトがない場合は、configChanges を簡単に使用できます。

于 2011-05-09T08:20:06.353 に答える
2

これをマニフェストファイルのアクティビティに追加することで問題を解決しました

android:configChanges="keyboardHidden|orientation|screenSize"

于 2013-03-10T16:45:07.907 に答える
1

前にこの質問に答えたところです: Android - 画面の向きがアクティビティをリロードします

あなたの場合、Android が Activity を強制終了するのを完全に防ぎたいと考えています。マニフェストを更新して方向の変更をキャッチする必要があります。次に、方向の変更が発生したときに必要なことを実際に実行するために、方向変更のコールバックを実装する必要があります (これは何もない場合もあります)。

于 2011-05-09T07:01:56.373 に答える
1

android:screenOrientation="portrait"マニフェストのアクティビティ タグで、方向をロックします。

詳細については、このリンクを確認してください。

于 2011-05-09T07:02:10.547 に答える
1

非同期タスク内で多くのネットワーキングを行っている場合は、おそらくonRetainNonConfigurationInstance() ansを使用してから、このチュートリアルまたはこのonCreate()ようにメソッドでデータを取得する必要があります

于 2011-05-09T07:09:29.230 に答える
1

マニフェストのアクティビティに android:configChanges="orientation" を追加し、このコードをアクティビティ クラスに追加して確認してください。

@Override
public void onConfigurationChanged(Configuration newConfig)
    {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.main);
}

このメソッドは、方向が変更されたときに呼び出されます。何も変更したくない場合は、空白にします

于 2011-05-09T07:09:31.380 に答える