0

据我所知,调用 AppWidgetProvider 的 onUpdate() 方法有两种类型:

  1. 当 updatePeriodMillis 圈子过期时
  2. 当新的小部件添加到主屏幕时

在 onUpdate() 方法中,我想在第一种情况下启动一些服务,但在第二种情况下不会。是否可以确定 onUpdate() 是如何被调用的?

4

1 回答 1

0

我认为更新广播中没有提供给您的简单标志来指示任何一种情况。

请记住,虽然每个ACTION_APPWIDGET_UPDATE广播(以及因此每个 onUpdate() 调用)都包含用于更新目的的所有或部分 appwidget ID。这些 ID 在小部件的生命周期中是不变的,每个 ID 都具有相同的 ID,直到它被删除。

这意味着您可以存储您的 ID 并在每次收到 onUpdate() 调用时进行比较。如果您在提供的数组中点击了一个 ID 不在您保存的记录中的 onUpdate(),您可以确定这是一个正在更新的新小部件实例。否则它是一个或多个旧的。

为了保持你的记录整洁,你也必须onDeleted()在你的提供者中实施。从您的记录中删除已删除的 ID。否则,当用户删除小部件并添加新实例时,您可能会遇到问题,它可能会获得相同的 ID。

于 2012-02-21T10:42:36.727 回答