Android小部件:在小部件添加到屏幕之前显示配置活动

我有一个Android Widget,它使用Web服务来检索和显示小部件上的数据。 窗口小部件具有extends PreferenceActivity的配置活动。 安装窗口小部件后,配置活动就会立即启动,这是此窗口小部件的所需行为。

问题是,无论何时将小部件添加到主屏幕,小部件都会在配置活动开始/完成之前尝试更新自身,这可能会导致长时间延迟(几秒钟)。 配置活动应在窗口小部件在添加新窗口小部件时尝试自行更新之前发生。

以下是添加窗口小部件时我在LogCat中看到的事件序列:

  1. Widget.onRecive:action = APPWIDGET_ENABLED
  2. Widget.onEnabled
  3. Widget.onReceive:action = APPWIDGET_UPDATE
  4. Widget.onUpdate:Widget服务已启动。
  5. WidgetService.onStartCommand:潜在的长时间运行工作会延迟配置活动立即显示。
  6. WidgetConfiguration.onCreate
  7. Widget.onReceive:action = APPWIDGET_UPDATE
  8. Widget.onUpdate:Widget Service再次启动
  9. WidgetService.onStartCommand:可能再次执行长时间运行的工作。

发生的事情是,添加窗口小部件后,服务将在显示配置视图之前启动。

的Manifest.xml

                       


有没有办法在系统尝试将小部件添加到主屏幕之前强制显示配置活动?

来自android文档: http : //developer.android.com/guide/topics/appwidgets/index.html#Configuring

创建App Widget时不会调用onUpdate()方法(系统在启动配置Activity时不会发送ACTION_APPWIDGET_UPDATE广播)。 首次创建App Widget时,配置Activity负责从AppWidgetManager请求更新。 但是,将为后续更新调用onUpdate() – 它仅在第一次被跳过。

但是,这似乎不正确!

我所做的是为SharedPreferences添加一个布尔值,告诉我这个widgetId是否已通过配置。 如果没有跳过此更新。 在AppWidgetProvider类的onUpdate方法中实现它。

在清单中声明ActivityConfig:

使用更新小部件类:

 public abstract class SampleWiget extends AppWidgetProvider { 

}

按照android开发人员小部件支持来理解它。