2013-08-01 27 views
5

Điều gì sẽ nhanh hơn? Thêm một loạt giá trị chuỗi vào bundle và sau đó thêm giá trị đó vào một số intent? Hoặc chỉ cần thêm các giá trị vào một số intent sử dụng intent.putExtra()? Hay nó không tạo ra nhiều khác biệt?Điều gì sẽ nhanh hơn? Một intent.putExtras (Bundle with Strings) hoặc nhiều intent.putExtra (String)?

Tìm kiếm của Google cung cấp cho tôi các hướng dẫn, nhưng không có nhiều câu trả lời. Chỉ cần hỏi về sự tò mò, tự hỏi liệu nó có ảnh hưởng đến hiệu năng sử dụng cái này hay cái kia không. This đã đóng, nhưng không trả lời những gì tôi muốn biết.

Trả lời

4

Tự mình tạo Bundle và sau đó thêm vào mục đích sẽ nhanh hơn.

Theo source code, Intent.putExtra(String, String) phương pháp trông như thế này:

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

Vì vậy, nó sẽ luôn luôn kiểm tra lúc đầu nếu Bundle mExtras đã được tạo. Đó là lý do tại sao nó có thể chậm hơn một chút với chuỗi các chuỗi bổ sung lớn. Intent.putExtras(Bundle) trông như thế này:

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

Vì vậy, nó sẽ kiểm tra if (mExtras == null) chỉ một lần và sau đó thêm tất cả các giá trị vào nội Bundle mExtras với 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; 
} 

Bundle được hỗ trợ bởi một Map (HashMap để chính xác), do đó, việc thêm tất cả các chuỗi cùng một lúc vào bản đồ này cũng sẽ nhanh hơn việc thêm Strings từng cái một.

+0

Cảm ơn, đã sử dụng các gói từ anyways bắt đầu, chỉ cần tự hỏi nếu nó có thể được thực hiện tốt hơn. – Lunchbox

+0

+1, do đó, việc thêm một số lượng lớn các giá trị chuỗi bằng cách sử dụng 'intent.putExtra()' sẽ có nó kiểm tra một gói mỗi lần, nhưng chỉ cần thêm một bó sẽ làm cho việc kiểm tra được thực hiện chỉ một lần. Làm cho tinh thần – Lunchbox

+0

@Lunchbox Vâng, chính xác. Hơn nữa, một 'mExtras.putAll()' nên nhanh hơn nhiều cuộc gọi đến 'mExtras.putString()' (thông báo 'unparcel()' cuộc gọi). –

Các vấn đề liên quan