2010-07-14 2 views
2

Я немного озадачен тем, как работает техника AppWidget от android.Почему AppWidgetProvider создается каждый раз, когда я добавляю виджет приложения?

Я переопределен конструктор AppWidgetProvider как это:

public class MyProvider extends AppWidgetProvider { 

    public MyProvider() { 
    Log.d("TEST", "Creating...") 
    } 

    public void onUpdate(..., int[] appWidgetIds) { 
     // updating stuff here 
    } 
} 

Из того, что я прочитал в документации, я понял, что AppWidgetProvider инстанциируется один раз, когда виджет этого типа добавляется в первый раз. Если добавится еще один виджет , то такой же тип, он будет управляться именно этим провайдером.

Но я только что обнаружил, что это не тот случай!

Для каждого виджета, который я добавляю, android создает новый MyProvider (я вижу, что из «adb logcat» - он печатает «Создание ...» для каждого виджета)! Я не понимаю почему :) Может, у меня что-то не так? Или документация не понятна. В чем причина того, что appWidgetIds переданы в onUpdate и другими способами, если каждый поставщик управляет только ОДИН виджетом?

+0

Я верю, что приложение AppWidgetManager создается один раз, приложение AppWidgetProvider будет создано для каждого экземпляра добавленного виджета. Где в документах вы видите, что поставщик виджета приложений создается только один раз, я не могу найти эту информацию там? –

+0

Я просто предположил, что, поскольку я видел аргумент appWidgetIds :) Я подумал: «В чем смысл иметь его, если он всегда будет равен 1». Спасибо. Также см. Ответы ниже, ребята правы – dimsuz

ответ

6

AppWidgetProvider является подклассом BroadcastReceiver. Цитируя BroadcastReceiver documentation:

BroadcastReceiver объект только действителен в течение всего срока обращения к OnReceive (Context, Intent). Как только ваш код вернется от этой функции, система считает объект завершенным и более неактивным.

Следовательно, AppWidgetProviders являются одноразовыми и должны рассматриваться как таковые. Каждая операция виджета приложения (обновление и т. Д.) Приведет к созданию, использованию и отбрасыванию поставщика.

+0

Действительно. Спасибо за объяснение! – dimsuz

0

AppWidgetManager создан только один раз. Для каждого созданного AppWidget создается AppWidgetProvider.

+0

Спасибо! кажется, что ответ выше более подробный, поэтому я буду отмечать его как принятый :) – dimsuz

Смежные вопросы