3

onTouch()リスナーの1つで、タッチイベントの処理方法を決定する前に、現在ブールユーザー設定を確認しています。

boolean shouldCue = preferences.getBoolean(v.getContext().getString(R.string.should_cue), true);

LogCatを観察すると、ユーザーが画面に触れると、このステートメントが何度も呼び出されることがわかります。

そのため、 onSharedPreferenceChanged()リスナーshouldCueを実装することで、そのブール値を「キャッシュ」することを考えていました。

もちろん、これを実装して...超高速のAndroidデバイスでごくわずかな違いを観察することもできます。バリエーションが多すぎるため、「大多数のAndroidデバイス」でこれをテストすることはできません。

だから私の質問は:

  1. UIを介して設定が変更されていない場合でも、onSharedPreferenceChanged()が呼び出されますか(つまり、プログラムでeditor.commit();
  2. SharedPreferencesブール値をUIまたはプログラムで(両方を同時にではなく)変更できる場合、それをキャッシュすると@Synchronized処理が義務付けられますか?
  3. キャッシュされた方法とキャッシュされていない方法のパフォーマンスの違いに関する見積もりはありますか?(質問を簡単にするために、Droid 1 A855のような古い電話を参照していると仮定しましょう)
4

1 に答える 1

2

私の意見では、onTouch()メソッドで設定を読み取ることは避けるのが最善です。これは非常に高速に実行され、設定から読み取ることはxmlの解析を意味します(これは1秒間に何度も行う必要があることではありません)。エミュレーターで試して、十分に速く反応するかどうかを確認できますが、別の場所でそれを読むか、このブール値を格納/取得する別の方法を見つけるのが最善です。

編集:質問について:

1)はい、設定がまったく変更されていなくても

2)はい、この方法で実装できますが、特にビューを再利用する場合は、多くの問題が発生する可能性があります。

3)多くの要因(ハードウェア、OSバージョン、JIT対応など)のために他のデバイスへの影響を正確に見積もることはできませんが、ベンチマークがなければ、キャッシュされた方法が最も効率的であるようです。

onTouch()メソッドでそのブール値を本当に操作する必要がありますか?そしてこの場合、フックやリスナーを定義してみませんか?

于 2012-06-19T16:45:16.573 に答える