2016-06-28 12 views
1

查看Android源代碼時,我觀察到了獲取包含結果額外數據的Bundle的兩種常用方法。BroadcastReceiver.getResultsExtra()與Intent.getExtras()

A.呼籲getResultsExtra()

private class StatusBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle b = getResultExtras(true); 
    } 
} 

B.呼籲intent.getExtras()

private class StatusBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle b = intent.getExtras(); 
    } 
} 

爲什麼你會選擇通過另一種方法一種方法?是否有某些情況下優先於其他方法?它們是否相同?

回答

1

getResultExtras()這樣使用:

Bundle results = getResultExtras(true); 
results.putString("someTag", "someValue"); 

到不同的接收器之間共享信息/值

所以,如果你把一些值或返回地圖從getResultExtra變化()在某些BroadcastReceiver中,它將按照docs

發送到下一個接收器。檢索當前結果的額外數據,由前一個接收器設置。您對返回的地圖所做的任何更改都會傳播到下一個接收器。

,另一方面 intent.getExtras()

返回使用intent.putExtra()同時開始廣播意圖演員中設置的值,例如這樣的:

Intent intent = new Intent(); 
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
intent.setAction("com.yourpackage.BroadcastReceiver"); 
intent.putExtra("someTag", "someValue"); 
sendBroadcast(intent); 
+0

所以,如果我不改變任何值,並且是隻對閱讀價值感興趣,兩者相當? – GrandAdmiral

+0

啊,不。如果getResultExtras(bool)中的bool設置爲true,那麼您將獲得前一個接收器發送的值(映射)(如果前一個映射爲null,則返回新的空映射),如果設置爲false,則返回空映射。而intent.getExtras()只有在使用'sendBroadcast(intent);'開始廣播時設置的值。所以getResultExtras(bool)將不會有intent.getExtras()所具有的值! –

1

因爲您可以修改要發送到下一個廣播接收機的結果集,所以當您使用「Context.sendOrderedBroadcast」發送有序廣播時,「BroadcastReceiver.getResultExtras」方法很有意義(請記住,當您發送一個命令廣播中,接收器被稱爲同步母板,而不是公共廣播「Context.sendBroadcast」的異步母板)。考慮到這一點,假設你有3個接收者,並且向他們發送了一個有序的廣播(假設你把廣播1的優先級作爲第一個,然後接收者),那麼接收者1可以用「BroadcastReceiver.getResultExtras 「方法並添加一些值,當廣播到達該值時接收器2將看到該值,等等。 「Intent.getExtras()」只會爲您提供廣播接收器的Intent的額外值。

相關問題