2012-02-21 57 views
0

据我所知,有两种类型调用的AppWidgetProvider的的onUpdate()方法:它可以确定如何调用AppWidgetProvider的onUpdate()方法?

  1. 时updatePeriodMillis圆过期
  2. 当增加新的部件到主屏幕

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

回答

0

我认为在更新广播中没有提供给您的简单标志,它表示两种情况。

请记住,每个ACTION_APPWIDGET_UPDATE广播(因此每个onUpdate()调用)包含用于更新目的的appwidget ID的全部或子集。这些ID在小部件的生命周期中是不变的,每个ID在被删除之前都有相同的ID。

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

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

+0

感谢您的回答!这个对我有用。在我的应用程序中,每个新的小部件ID都存储在SQLite表行中,并带有一些小部件设置。因此,所需的检查是检查是否存在具有相应小部件标识的行。而且我还删除了从主屏幕删除小部件时的表格行。 – riden 2012-02-21 19:15:09

相关问题