Новый экземпляр MyAppWidgetProvider создан для каждой полученной трансляции?

Я пишу виджет для Android. У меня есть MyAppWidgetProvider, который расширяет AppWidgetProvider.

В течение жизненного цикла виджета он получает различные обратные вызовы: onUpdate, onEnabled, onDisabled и т. Д. Они запускаются действиями ACTION_APPWIDGET_UPDATE, ACTION_APPWIDGET_ENABLED и т. Д.

Согласно Руководству по виджетам приложения, "[onDisabled] - это место, где вы должны очистить любую работу, выполненную в onEnabled". Я понял, что это означает, что onEnabled может установить некоторое состояние экземпляра в MyAppWidgetProvider, а onDisabled должен его разрушить. Тем не менее я обнаружил, что новый экземпляр MyAppWidgetProvider создается для каждого отдельного действия.

Итак, это ожидаемое поведение? Должен ли я всегда ожидать создания нового экземпляра для каждого обратного вызова, или есть какой-то способ настроить получателя или отправителя широковещания на использование существующего экземпляра? Если всегда создается новый экземпляр, тогда небезопасно хранить любое состояние экземпляра в MyAppWidgetProvider, что не ясно из документов.

2 ответа

Решение

Да, вы не можете надеяться, что один экземпляр BroadcastReceiver будет переработан.

Документы утверждают, что:

 A BroadcastReceiver object is only valid for the duration of the call to 
 onReceive(Context, Intent). Once your code returns from this function, the system 
 considers the object to be finished and no longer active.

И когда AppWidgetProvider расширяет BroadcastReceiver, вы получили свой ответ.:)

Я не очень знаком с AppWidgetProvider, но так как это тип BroadcastReceiver, то верно, что новый экземпляр должен запускаться при каждом событии. Обработка в BroadcastReceiver должна быть минимальной. В этом случае исключительно для обновления виджета приложения с информацией, полученной из нового намерения.

Другие вопросы по тегам