0

デフォルトでは、アプリの実行中にユーザーがデバイスの表示言語を変更すると、Androidはアクティビティを破棄してから再作成します。これは、アプリが最新の設定を正しく使用していることを確認するために行われます。

マニフェストlocaleの属性に追加することで、この動作をオーバーライドできます。configChangesその後、ユーザーが言語を変更するとonConfigChanged()、完全に再起動するのではなく、へのコールバックのみを受け取ります。ただし、ドキュメントには、「すべてのリソースを再度取得する」必要があると記載されています。

これらの構成変更はすべて、アプリケーションに表示されるリソース値に影響を与える可能性があります。したがって、onConfigurationChanged()が呼び出された場合、変更を正しく処理するには、通常、すべてのリソース(ビューのレイアウト、ドローアブルなどを含む)を再度取得する必要があります。

私の質問は、これはロケールの変更に本当に当てはまりますか?ユーザーの言語設定をまったく使用せず、GLSurfaceViewを使用してグラフィックのみをレンダリングする架空のアプリがある場合、このイベントを無視しても安全ですか?もしそうなら、あなたはそれをドキュメントでバックアップできますか?

イベントを無視することは正しく機能しているようで、ロケールを使用していないときにビューを再作成することはあまり意味がありませんが、微妙なバグを導入していないことを確認したいと思います。

どんな情報でも大歓迎です。

4

1 に答える 1

1

あなたが言ったように、GLSurfaceViewは完全にロケールに依存しません。追加localeしても問題configChangesないので追加しても問題ありません。また、これらの構成に応じてレイアウトが変更されることはありません。keyboardscreenSize

編集:ドキュメント:http ://developer.android.com/guide/topics/resources/runtime-changes.html

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

[...]

b。構成変更を自分で処理する

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

また:http ://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

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

于 2012-07-11T15:06:15.547 に答える