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

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

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

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

  1. Widget.onRecive: action = 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>



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

12
задан Metro Smurf 4 February 2012 в 21:06
поделиться