自分でBundle
を作成してから、それをインテントに追加する方が高速になります。
source codeによると、Intent.putExtra(String, String)
方法は次のようになります。だから、
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
Bundle mExtras
がすでに作成された場合、それは常に最初にチェックされます。だからこそ、ストリング追加の大きなシーケンスでは、おそらく少し遅くなります。 Intent.putExtras(Bundle)
は次のようになります。
public void putAll(Bundle map) {
unparcel();
map.unparcel();
mMap.putAll(map.mMap);
// fd state is now known if and only if both bundles already knew
mHasFds |= map.mHasFds;
mFdsKnown = mFdsKnown && map.mFdsKnown;
}
Bundle
するMap
によってバックアップされている(HashMap
をする:
public Intent putExtras(Bundle extras) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putAll(extras);
return this;
}
だから、それはBundle.putAll()
と内部Bundle mExtras
にすべての値を追加し、後に一度だけif (mExtras == null)
をチェックします正確です)、すべての文字列を一度にこのマップに追加すると、文字列を1つずつ追加するよりも速くなります。
ありがとう、とにかくスタートからのバンドルを使用していた、ちょうどそれがより良いことができるかどうか疑問に思った。 – Lunchbox
+1であるため、intent.putExtra()を使用して多数の文字列値を追加すると、毎回バンドルをチェックすることになりますが、バンドルを1つ追加するだけでチェックが1回だけ行われます。意味がある – Lunchbox
@Lunchboxはい、まさにそうです。さらに、 'mExtras.putAll()'は 'mExtras.putString()'( 'unparcel()'呼び出しに気付く)よりも速くなければなりません。 –