gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:59:22 26 4
gpt4 key购买 nike

我根据 android 文档开发了我的 AppWidget,在 onCreate() 中加载我的光标并在 onDataSetChanged() 中重新加载它,并且一切正常,直到我在 RemoteViewsService.RemoteViewsFactory 中设置了一些断点并且令人惊讶地发现 onDataSetChanged() 总是 在调用 onCreate() 之后调用,这使得我的光标在第一次创建时加载了两次。我使用的是 Android 4.4.3。

根据Api doc ,

public abstract void onDataSetChanged ()

Added in API level 11

Called when notifyDataSetChanged() is triggered on the remote adapter. This allows a RemoteViewsFactory to respond to data changes by updating any internal references. Note: expensive tasks can be safely performed synchronously within this method. In the interim, the old data will be displayed within the widget.

看来这个调用只是我们自己手动调用notifyDataSetChanged()触发的。

然而根据Appwidget guide ,

In onCreate() you setup any connections / cursors to your data source. Heavy lifting, for example downloading or creating content etc, should be deferred to onDataSetChanged() or getViewAt(). Taking more than 20 seconds in this call will result in an ANR.

deferred 是不是暗示 onDataSetChanged() 将在 onCreate() 之后调用?我不太确定...但是它确实说我应该在 onCreate() 中设置我的光标。

我试图自己调查这个问题,但是可用的源代码使用的是 Binder,因此远程调用者仍然未知,因此我无法检查其源代码。

你有什么想法吗?

最佳答案

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

Data flow

( App Widgets | Android Developers )

因此在 onDataSetChanged 中加载光标是安全的

关于android - 在 AppWidget 的 RemoteViewsFactory 中的 onCreated() 之后依赖对 onDataSetChanged() 的调用是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com