gpt4 book ai didi

Android - AppWidget AppWidgetManager.updateAppWidget() 没有被立即调用

转载 作者:行者123 更新时间:2023-11-29 14:06:07 35 4
gpt4 key购买 nike

我正在开发一个应用小部件,它使用 RemoteViews 来显示一个 ListView。为了简单起见,我将对 appwidget 的功能进行类比:

  1. 用户将选择将应用程序小部件添加到主屏幕。选择小部件后,启动配置 Activity ,用户从菜谱列表中选择一个菜谱。
  2. 从配置 Activity 中选择配方后,配置 Activity 广播 AppWidgetManager.ACTION_APPWIDGET_UPDATE Intent 。这个 Intent 在我的 AppWidgetProvider 类的 onReceive 方法中接收和处理。从这里 RemoteView 被实例化并传递给 AppWidgetManager.updateAppWidget() 方法。这将继续填充成分的 ListView。

这一切都按预期工作,除了当我尝试从应用程序小部件手动更新 ListView 时。我已经设置了一个 PendingIntent 来重新启动配置 Activity ,这也有效。不幸的是,对 AppWidgetManager.updateAppWidget() 的调用不会像在将其添加到主屏幕时启动时那样立即调用,并且 ListView 不会更新。但是,在以某种方式向下滚动列表后,确实会调用更新(我估计直到它传递了它在缓存中加载的行数)。这将触发我的 FlightBoardAppWidgetService 和 ViewsFactory。这几乎就像 updateAppWidget 被放入某个延迟加载的队列中一样。我试图查看 Android 源代码以了解 AppWidgetManager.updateAppWidget() 的编码方式,但它似乎被隐藏了。

tl;dr:AppWidgetManager.updateAppWidget() 并不总是立即被调用,这是怎么回事?

有什么方法可以让 ListView 在实际调用时更新?我究竟做错了什么?谢谢!

最佳答案

好吧,我终于解决了这个问题。这有点 hack,但我最终通过声明刷新广播和更新广播解决了这个问题。每次我想更新我调用 updateAppWidget() 的小部件,然后从接收和处理这个广播的函数中,我启动另一个调用 notifyChanged 的​​广播。这一直有效!

关于Android - AppWidget AppWidgetManager.updateAppWidget() 没有被立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837032/

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