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

Lun*_*box 5 performance android bundle android-intent

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

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

Ada*_*zyk 4

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

根据源代码,Intent.putExtra(String, String)方法如下:

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

因此,它总是首先检查是否Bundle mExtras已经创建。这就是为什么在添加大量字符串时它可能会慢一些。Intent.putExtras(Bundle)看起来像这样:

public Intent putExtras(Bundle extras) {
    if (mExtras == null) {
        mExtras = new Bundle();
    }
    mExtras.putAll(extras);
    return this;
}
Run Code Online (Sandbox Code Playgroud)

因此,它只会检查一次,然后将所有值添加到if (mExtras == null)内部:Bundle mExtrasBundle.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;
 }
Run Code Online (Sandbox Code Playgroud)

Bundle由 a 支持Map(HashMap准确地说),因此一次将所有字符串添加到此映射应该也比逐个添加字符串更快。