Новый экземпляр MyAppWidgetProvider, созданный для каждой полученной трансляции? - PullRequest
1 голос
/ 05 января 2012

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Да, вы не можете надеяться, что один экземпляр 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, вы получите свой ответ.:)

1 голос
/ 05 января 2012

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

...