我根据android文档开发了我的AppWidget
,将光标加载到onCreate()
并在onDataSetChanged()
中重新加载,一切正常,直到我在{{{{ 3}}并且令人惊讶地发现onDataSetChanged()
在调用onCreate()
后始终 ,这使得我的游标在首次创建时加载了两次。我在Android 4.4.3上。
根据RemoteViewsService.RemoteViewsFactory
,
public abstract void onDataSetChanged()
在API级别11中添加
在远程适配器上触发notifyDataSetChanged()时调用。这允许RemoteViewsFactory通过更新任何内部引用来响应数据更改。注意:在此方法中可以安全地同步执行昂贵的任务。在此期间,旧数据将显示在小部件中。
似乎只能通过手动调用notifyDataSetChanged()来触发此调用。
然而根据Api doc,
在onCreate()中,您可以为数据源设置任何连接/光标。举重, 例如下载或创建内容等,应该推迟到onDataSetChanged() 或getViewAt()。在此调用中花费超过20秒将导致ANR。
通过说延迟,是否暗示onDataSetChanged()
之后会调用onCreate()
?我不太确定......但它确实说我应该将光标设置在onCreate()
内。
我自己尝试调查此问题,但可用的源代码使用Binder
,因此远程调用者仍然未知,因此我无法检查其来源。
你有什么想法吗?
答案 0 :(得分:5)
正如您在链接指南中看到的那样,每次在onCreate之后调用onDataSetChanged:
(App Widgets | Android Developers)
将光标加载到onDataSetChanged
是安全的