【发布时间】:2014-08-12 08:56:22
【问题描述】:
我根据 android 文档开发了我的 AppWidget,将光标加载到 onCreate() 并在 onDataSetChanged() 中重新加载,一切正常,直到我在 RemoteViewsService.RemoteViewsFactory 中设置了一些断点并惊讶地发现 @ 987654328@ 在调用onCreate() 之后总是被调用,这使得我的光标在第一次创建时加载了两次。我使用的是 Android 4.4.3。
根据Api doc,
public abstract void onDataSetChanged()
在 API 级别 11 中添加
在远程适配器上触发 notifyDataSetChanged() 时调用。这允许 RemoteViewsFactory 通过更新任何内部引用来响应数据更改。注意:在此方法中可以安全地同步执行昂贵的任务。在此期间,旧数据将显示在小部件中。
看来这个调用只有自己手动调用notifyDataSetChanged()才会触发。
不过根据Appwidget guide,
在 onCreate() 中,您可以为数据源设置任何连接/游标。举重, 例如下载或创建内容等,应推迟到 onDataSetChanged() 或 getViewAt()。在此调用中花费超过 20 秒将导致 ANR。
通过说延迟,是否暗示onDataSetChanged() 将在onCreate() 之后被调用?我不太确定...但是它确实说我应该将光标设置在 onCreate() 内。
我尝试自己调查此问题,但可用的源代码使用Binder,因此远程调用者仍然未知,因此我无法检查其来源。
你有什么想法吗?
【问题讨论】:
标签: android android-appwidget remoteview