什么更快?一个intent.putExtras(捆绑带字符串)或许多intent.putExtra(字符串)?

时间:2013-08-01 10:19:41

标签: android performance android-intent bundle

什么更快?将一堆字符串值添加到bundle,然后将其添加到intent?或者只是使用intent将值添加到intent.putExtra()?或者它没有太大区别?

谷歌搜索给了我教程,但没有太多答案。只是出于好奇,想知道它是否会影响使用其中一个的性能。 This接近了,但没有回答我想知道的事情。

1 个答案:

答案 0 :(得分:4)

自己创建Bundle然后将其添加到意图应该更快。

根据source codeIntent.putExtra(String, String)方法如下所示:

public Intent putExtra(String name, String value) {
    if (mExtras == null) {
        mExtras = new Bundle();
    }
    mExtras.putString(name, value);
    return this;
}

因此,它始终会检查是否已创建Bundle mExtras。这就是为什么对于大量的String添加可能会慢一点。 Intent.putExtras(Bundle)看起来像这样:

public Intent putExtras(Bundle extras) {
    if (mExtras == null) {
        mExtras = new Bundle();
    }
    mExtras.putAll(extras);
    return this;
}

因此,它只会检查if (mExtras == null)一次,然后使用Bundle mExtras将所有值添加到内部Bundle.putAll()

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;
 }

BundleMap(确切地说HashMap)备份,因此将所有字符串一次性添加到此映射中也应该比逐个添加字符串更快。 / p>