我有一个 Android Widget,它使用 Web 服务来检索并显示 Widget 上的数据。该小部件具有
extends PreferenceActivity
的配置活动。安装小部件后,配置活动就会启动,这是该小部件所需的行为。
问题是,每当将小部件添加到主屏幕时,小部件都会在配置活动启动/完成之前尝试更新自身,这可能会导致长时间延迟(几秒钟)。配置活动应该在每次添加新小部件时小部件尝试更新自身之前发生。以下是添加小部件时我在 LogCat 中看到的事件序列:
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>
问题
有没有办法在系统尝试将小部件添加到主屏幕之前强制显示配置活动?
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 方法中实现此功能。
<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开发者小部件支持来了解它。