【问题标题】:Android - AppWidget AppWidgetManager.updateAppWidget() not being called instantlyAndroid - AppWidget AppWidgetManager.updateAppWidget() 没有被立即调用
【发布时间】:2011-07-26 21:49:36
【问题描述】:

我正在开发一个使用 RemoteViews 来显示 ListView 的 appwidget。为简单起见,我将 appwidget 的功能做一个类比:

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

这一切都按预期工作,除非我尝试从 appwidget 手动更新 ListView。我设置了一个 PendingIntent 来重新启动配置活动,它也可以工作。不幸的是,对 AppWidgetManager.updateAppWidget() 的调用不会像在将其添加到主屏幕后启动时那样立即被调用,并且 ListView 不会得到更新。但是,在向下滚动列表一种方式之后,确实会调用更新(我认为,直到它通过了它在缓存中加载的行数)。这会触发我的 FlightBoardAppWidgetService 和 ViewsFactory 。就好像 updateAppWidget 被放入了一些延迟加载的队列。我试图查看Android源代码以了解AppWidgetManager.updateAppWidget()是如何编码的,但它似乎被隐藏了。

tl;dr: AppWidgetManager.updateAppWidget() 并不总是被立即调用,这是什么原因?

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

【问题讨论】:

    标签: android android-appwidget remoteview


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2016-02-24
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2013-08-09
      相关资源
      最近更新 更多