Tengo un widget de Android que usa servicios web para recuperar y mostrar los datos en el widget. El widget tiene una actividad de configuración que extends PreferenceActivity
. La actividad de configuración se inicia tan pronto como se instala el widget, que es el comportamiento deseado para este widget.Android Widget: muestra la actividad de configuración antes de agregar el widget a la pantalla
El problema es que cada vez que se agrega un widget a la pantalla de inicio, el widget intenta actualizarse antes de iniciar/completar la actividad de configuración, lo que puede ocasionar un gran retraso (varios segundos). La actividad de configuración debe ocurrir antes de que el widget intente actualizarse en sí mismo cada vez que se agrega un nuevo widget.
Aquí es la secuencia de eventos que estoy viendo en LogCat cuando se añade un widget:
- Widget.onRecive: action = APPWIDGET_ENABLED
- Widget.onEnabled
- Widget.onReceive: acción = APPWIDGET_UPDATE
- Widget.onUpdate: El servicio de widgets se ha iniciado.
- WidgetServicio.onStartCommand: trabajo de ejecución potencialmente largo que retrasará la actividad de configuración para que se muestre inmediatamente.
- WidgetConfiguration.onCreate
- Widget.onReceive: action = APPWIDGET_UPDATE
- Widget.onUpdate: Widget servicio se inicia de nuevo
- WidgetService.onStartCommand: Potencialmente larga duración se realiza el trabajo de nuevo.
Lo que sucede es que cuando se agrega un widget, el servicio se iniciará antes de que se muestre la vista de configuración.
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>
Pregunta
¿Hay una manera de forzar la actividad de configuración que se muestra antes de que el sistema trata de añadir el widget a la pantalla de inicio?
Tuve un problema similar. La llamada al método update() ocurre antes de que se muestre la actividad de configuración. No encontré la manera de cambiar este comportamiento. – mrd