Mam widget Android, który korzysta z usług internetowych do pobierania i wyświetlania danych na widżecie. Widżet ma aktywność konfiguracyjną, która jest extends PreferenceActivity
. Czynność konfiguracyjna zostanie uruchomiona natychmiast po zainstalowaniu widgetu, co jest pożądanym zachowaniem tego widgetu.Android Widget: pokazuje aktywność konfiguracji przed dodaniem widgetu do ekranu
Problem polega na tym, że gdy widget jest dodawany do ekranu głównego, widżet podejmuje próbę aktualizacji przed rozpoczęciem/zakończeniem działania konfiguracji, co może potencjalnie prowadzić do dużego opóźnienia (kilka sekund). Czynność konfigurowania powinna nastąpić przed próbą aktualizacji samego widgetu za każdym razem, gdy dodawany jest nowy widget.
Oto sekwencja zdarzeń, które widzę w LogCat kiedy widget dodaje:
- Widget.onRecive: action = APPWIDGET_ENABLED
- Widget.onEnabled
- Widget.onReceive: akcja = APPWIDGET_UPDATE
- Widget.onUpdate: Usługa widgetów jest uruchomiona.
- WidgetService.onStartCommand: Potencjalnie długa praca, która opóźni działanie konfiguracyjne od natychmiastowego wyświetlenia.
- WidgetConfiguration.onCreate
- Widget.onReceive: action = APPWIDGET_UPDATE
- Widget.onUpdate: Widget usługa jest uruchomiona ponownie
- WidgetService.onStartCommand: Potencjalnie długo działa praca jest wykonywana ponownie.
Co się dzieje, że po dodaniu widgetu usługa uruchomi się przed wyświetleniem widoku konfiguracji.
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>
Pytanie
Czy istnieje sposób, aby wymusić aktywność konfiguracji, aby być pokazany zanim system próbuje dodać widżet do ekranu głównego?
Miałem nieznany problem. Wywołanie metody update() następuje przed wyświetleniem aktywności konfiguracyjnej. Nie znalazłem sposobu na zmianę tego zachowania. – mrd