2013-08-01 53 views
5

什麼是更快?將一串字符串值添加到bundle,然後將其添加到intent?或者只需使用intent.putExtra()將值添加到intent?或者它沒有太大的區別?什麼是更快?一個intent.putExtras(帶有字符串的Bundle)或許多intent.putExtra(String)?

谷歌搜索給了我教程,但沒有太多答案。只是出於好奇心問,想知道是否會影響使用其中一種或另一種的性能。 This接近了,但沒有回答我想知道的內容。

回答

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已經創建。這就是爲什麼在添加大量字符串時可能會慢一些。 Intent.putExtras(Bundle)看起來是這樣的:

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

所以,它會檢查if (mExtras == null)只有一次,以後所有的值添加到內部Bundle mExtrasBundle.putAll()HashMap

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備份(以精確),因此一次將所有字符串添加到此映射中也應該比逐個添加字符串更快。

+0

謝謝,無論如何都是從一開始就使用捆綁包,只是想知道它是否可以做得更好。 – Lunchbox

+0

+1,因此只需使用'intent.putExtra()'添加大量的字符串值就會讓它每次都檢查一個包,但僅僅添加一個包就會導致檢查只進行一次。有意義 – Lunchbox

+0

@Lunchbox是的,確切的。此外,一個'mExtras.putAll()'應該比對'mExtras.putString()'(通知'unparcel()'調用)的多次調用要快。 –

相關問題