Android Widget: показать активность конфигурации перед добавлением виджета на экран

У меня есть Android-виджет, который использует веб-службы для извлечения и отображения данных в виджетах. Виджет имеет конфигурационную активность, которая extends PreferenceActivity . Действие конфигурации запускается сразу после установки виджета, что является желательным поведением для этого виджета.

Проблема заключается в том, что всякий раз, когда виджет добавляется на главный экран, виджет пытается обновить его до того, как будет запущено / завершено действие конфигурации, что может потенциально привести к длительной задержке (несколько секунд). Активность конфигурации должна произойти до того, как виджет попытается обновить себя в любое время, когда будет добавлен новый виджет.

Вот последовательность событий, которые я вижу в LogCat при добавлении виджета:

  1. Widget.onRecive: действие = APPWIDGET_ENABLED
  2. Widget.onEnabled
  3. Widget.onReceive: action = APPWIDGET_UPDATE
  4. Widget.onUpdate: запущена служба виджета.
  5. WidgetService.onStartCommand: Потенциально продолжительная работа, которая немедленно отключит активность конфигурации.
  6. WidgetConfiguration.onCreate
  7. Widget.onReceive: action = APPWIDGET_UPDATE
  8. Widget.onUpdate: снова запущена служба виджета
  9. WidgetService.onStartCommand: Потенциально продолжительная работа выполняется снова.

Что происходит, когда добавляется виджет, служба запускается до того, как будет показано представление конфигурации.

manifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxxwidget" android:versionCode="1" android:versionName="@string/app_version" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name="xxxWidget" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> </receiver> <activity android:name="xxxWidgetConfigure" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="xxxWidgetService" /> </application> </manifest> 

Вопрос
Есть ли способ принудительно показать активность конфигурации до того, как система попытается добавить виджет на главный экран?

Из документации по android: http://developer.android.com/guide/topics/appwidgets/index.html#Configuring

Метод onUpdate () не будет вызываться при создании виджета приложения (система не будет отправлять широковещательную передачу ACTION_APPWIDGET_UPDATE при запуске операции конфигурации). Задание конфигурации запрашивает обновление от AppWidgetManager при первом создании виджета приложения. Однако onUpdate () будет вызываться для последующих обновлений – он пропускается только в первый раз.

ОДНАКО, это не кажется правильным!

То, что я сделал, это добавить логическое значение в SharedPreferences, которое говорит мне, если этот widgetId прошел через конфигурацию. Если вы не пропустите это обновление. Внедрите это в свой метод onUpdate класса AppWidgetProvider.

Объявить ActivityConfig в манифесте:

<activity android:name="com.zoostudio.moneylover.widget.ActivityWidgetConfig" android:label="Hello Widget Config"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> </intent-filter> </activity>

С классом виджета обновления:

 public abstract class SampleWiget extends AppWidgetProvider { 

}

Следить за поддержкой виджета разработчика android для его понимания.