Android - AppWidget AppWidgetManager.updateAppWidget()不会立即被调用

时间:2011-07-26 21:49:37

标签: android android-appwidget remoteview

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

  1. 用户将选择将appwidget添加到主屏幕。选择窗口小部件后,将启动配置活动,用户从配方列表中选择一个配方。
  2. 从配置活动中选择配方后,配置活动会广播AppWidgetManager.ACTION_APPWIDGET_UPDATE意图。这个意图在我的AppWidgetProvider类的onReceive方法中接收和处理。从这里实现RemoteView并将其传递到AppWidgetManager.updateAppWidget()方法。这将填写ListView的成分。
  3. 这一切都按预期工作,除非我尝试从appwidget手动更新ListView。我已经设置了PendingIntent来重新启动配置活动,这也有效。不幸的是,对AppWidgetManager.updateAppWidget()的调用不会立即被调用,因为它在将其添加到主屏幕时启动并且ListView没有得到更新。然而,在向下滚动列表之后,会调用更新(直到它传递了它在缓存中加载的行数,我估计)。这会触发我的FlightBoardAppWidgetService和ViewsFactory。这几乎就像updateAppWidget被放入一些延迟加载的队列中一样。我试着查看Android源代码,看看AppWidgetManager.updateAppWidget()是如何编码的,但它似乎是隐藏的。

    tl; dr: AppWidgetManager.updateAppWidget()并不总是立即被调用,是什么给出的?

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

1 个答案:

答案 0 :(得分:0)

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