2014-01-06 76 views
1

我想在ListView片段或其他(嵌套)片段中發生某些事情時,刷新ListView(自定義類)中的特定行。我目前使用這個圖案Android IntentFilter性能

News是一個自定義類NewsView正在顯示):

  • NewsView構造:在我的onReceive
    • 寄存器的BroadcastReceiver用的IntentFilter例如"UPDATE_NEWS_ITEM"
    • 反序列化News項目和比較項目ID
  • 動作發生在某處
    • 我創建了Intent(「UPDATE_NEWS_ITEM」),並將News項添加爲Serializable Extra。

這意味着,每一個具有NewsView反序列化從意圖News,因此這種方法具有一個比特的開銷。另一方面,我可以使用IntentFilter(如"UPDATE_NEWS_ITEM_154")爲每個NewsView註冊一個廣播接收器,其中154是該項目的ID。那麼廣播意圖只能達到一個接收者,並且看起來更有效。

註冊這麼多廣播接收機有什麼不足嗎?或者Android會很樂意應付潛在的數百個?

+0

有沒有什麼不能使用'Interface'接收器和列表視圖類之間,或直接在類中創建接收器的實例,並使用'registerReceiver'和'unregisterReceiver'原因? – Simon

+0

我簡化了事情,有多個類顯示'新聞'和多個類生成刷新,所以我認爲不是。 – Axarydax

+0

當然,在所有這些類中實現一個回調監聽器沒有比接收一個意圖更多的工作嗎?如果不知道你的體系結構,那麼你可以創建一個基類Activity,然後從這個監聽器繼承它? – Simon

回答

1

如果您只在您的應用程序內廣播,請考慮通過LocalBroadcastManager使用意圖,而不是在清單中使用意向過濾器來廣播意圖。

據我所知,這些直接轉換到函數調用,並不通過操作系統隊列。

更多LocalBroadcastManager here