Безопасно ли полагаться на вызов onDataSetChanged () после onCreated () в RemoteViewsFactory приложения AppWidget

Я разработал свой AppWidget соответствии с документом android doc, загрузив мой курсор в onCreate() и перезагрузив его в onDataSetChanged() , и все сработало нормально, пока я не установил некоторые точки останова в моем RemoteViewsService.RemoteViewsFactory и неожиданно обнаружил, что onDataSetChanged() всегда называется После вызова onCreate() , который onCreate() мой курсор дважды при первом создании. Я на Android 4.4.3.

Согласно документу Api ,

Public abstract void onDataSetChanged ()

Добавлено в API уровня 11

Вызывается, когда на удаленном адаптере запускается notifyDataSetChanged (). Это позволяет RemoteViewsFactory реагировать на изменения данных, обновляя любые внутренние ссылки. Примечание: дорогостоящие задачи можно безопасно выполнять синхронно в рамках этого метода. Тем временем старые данные будут отображаться внутри виджета.

Кажется, что этот вызов запускается только вручную, вызывая notifyDataSetChanged ().

Однако, согласно руководству Appwidget ,

В onCreate () вы устанавливаете любые подключения / курсоры к источнику данных. Тяжелый подъем, например загрузка или создание контента и т. Д., Следует отложить до onDataSetChanged () или getViewAt (). При этом более 20 секунд при этом вызове будет ANR.

Говоря отложенным , подразумевается ли это, что onDataSetChanged() будет вызываться после onCreate() ? Я не уверен. Однако он говорит, что я должен настроить курсор внутри onCreate() .

Я попытался сам расследовать эту проблему, однако доступный исходный код использует Binder поэтому удаленный вызывающий абонент остается неизвестным, поэтому я не могу проверить его источник.

Есть ли у вас какие-либо идеи?

Как вы можете видеть в своем связанном руководстве, onDataSetChanged каждый раз вызывается после onCreate:

Поток данных

( App Widgets | Разработчики Android )

Так что безопасно загружать курсор в onDataSetChanged