在AppWidget的RemoteViewsFactory中onCreated()之后依赖对onDataSetChanged()的调用是否安全?

Hai*_*ang 6 android remoteview android-appwidget

我在我的开发AppWidget根据Android的文档,装我的光标onCreate(),并在重新加载它onDataSetChanged(),一切工作正常,直到我把我的一些断点RemoteViewsService.RemoteViewsFactory,并惊奇地发现,onDataSetChanged()始终调用后调用onCreate(),这使我的光标装载两次,当第一创建.我在Android 4.4.3上.

根据Api doc,

public abstract void onDataSetChanged()

在API级别11中添加

在远程适配器上触发notifyDataSetChanged()时调用.这允许RemoteViewsFactory通过更新任何内部引用来响应数据更改.注意:在此方法中可以安全地同步执行昂贵的任务.在此期间,旧数据将显示在窗口小部件中.

似乎只能通过自己手动调用notifyDataSetChanged()来触发此调用.

但是根据Appwidget指南,

在onCreate()中,您可以为数据源设置任何连接/光标.繁重的工作,例如下载或创建内容等,应该推迟到onDataSetChanged()或getViewAt().在此呼叫中花费超过20秒将导致ANR.

通过说延期,是否暗示onDataSetChanged()将被称为后onCreate()?我不太确定......但它确实说我应该把光标放在里面onCreate().

我自己尝试调查此问题,但是可用的源代码正在使用,Binder因此远程调用者仍然未知,因此我无法检查其来源.

你有什么主意吗?

Aur*_*tic 5

正如您在链接指南中看到的那样,每次在onCreate之后调用onDataSetChanged:

数据流

(App Widgets | Android开发者)

因此,将光标加载到onDataSetChanged是安全的