据我所知,调用 AppWidgetProvider 的 onUpdate() 方法有两种类型:
- 当 updatePeriodMillis 圈子过期时
- 当新的小部件添加到主屏幕时
在 onUpdate() 方法中,我想在第一种情况下启动一些服务,但在第二种情况下不会。是否可以确定 onUpdate() 是如何被调用的?
据我所知,调用 AppWidgetProvider 的 onUpdate() 方法有两种类型:
在 onUpdate() 方法中,我想在第一种情况下启动一些服务,但在第二种情况下不会。是否可以确定 onUpdate() 是如何被调用的?
我认为更新广播中没有提供给您的简单标志来指示任何一种情况。
请记住,虽然每个ACTION_APPWIDGET_UPDATE
广播(以及因此每个 onUpdate() 调用)都包含用于更新目的的所有或部分 appwidget ID。这些 ID 在小部件的生命周期中是不变的,每个 ID 都具有相同的 ID,直到它被删除。
这意味着您可以存储您的 ID 并在每次收到 onUpdate() 调用时进行比较。如果您在提供的数组中点击了一个 ID 不在您保存的记录中的 onUpdate(),您可以确定这是一个正在更新的新小部件实例。否则它是一个或多个旧的。
为了保持你的记录整洁,你也必须onDeleted()
在你的提供者中实施。从您的记录中删除已删除的 ID。否则,当用户删除小部件并添加新实例时,您可能会遇到问题,它可能会获得相同的 ID。