2017-08-24 84 views
1

我已經在android中編寫了一些小部件,但有一件事總讓我好奇。在onUpdate()方法中,我們遍歷所有窗口小部件ID,它說可以有多個窗口小部件活動,因此全部更新它們全部爲。但爲什麼我們必須像這樣更新其他小部件?爲什麼我們必須從一個小部件更新多個小部件?

override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { 
    // There may be multiple widgets active, so update all of them 
    for (appWidgetId in appWidgetIds) { 
     updateAppWidget(context, appWidgetManager, appWidgetId) 
    } 
} 

每個部件都有自己的廣播reviever,每個部件都可以獨立運行。爲什麼我們必須從另一個小部件調用更新?

如果這是一個非常簡單的邏輯,請很容易地拿我的問題。

+0

我敢肯定你不需要更新一個小部件,如果它被註冊爲廣播接收器。如果不是,你確實需要。 – daniu

回答

1

每個小部件都有自己的廣播reviever

不,不。

首先,AppWidgetProvider類處理該提供程序提供的所有應用程序小部件。如果用戶創建了該應用程序窗口小部件的多個實例(例如,多個城市的天氣報告),則所有這些實例都由該單個類別更新。

其次,AppWidgetProvider的單個實例用於單個onUpdate()調用。這是因爲AppWidgetProviderBroadcastReceiver的子類,onUpdate()是由onReceive()觸發的,並且清單登記的BroadcastReceiver每調用獲得唯一實例。

+0

謝謝你這麼富有洞察力的段落。 – erluxman