我有一個Android小工具,它使用Web服務檢索並顯示小部件上的數據。該小部件的配置活動爲extends PreferenceActivity
。只要安裝了小部件,配置活動就會啓動,這是此小部件所需的行爲。Android小工具:顯示小部件添加到屏幕前的配置活動
問題是,無論何時將小部件添加到主屏幕,小部件都會在啓動/完成配置活動之前嘗試更新iteself,這可能會導致很長的延遲(幾秒鐘)。配置活動應該在小部件每次添加新小部件時嘗試更新自身之前進行。
這裏是我看到在logcat的事件序列當添加小部件:
- Widget.onRecive:行動= APPWIDGET_ENABLED
- Widget.onEnabled
- Widget.onReceive:動作= APPWIDGET_UPDATE
- Widget.onUpdate:Widget服務已啓動。
- WidgetService.onStartCommand:潛在的長時間運行的工作,它會延遲配置活動立即顯示。
- WidgetConfiguration.onCreate
- Widget.onReceive:行動= APPWIDGET_UPDATE
- Widget.onUpdate:件服務再次
- 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>
問題
有沒有辦法強制系統前要顯示的配置活動試圖將小部件添加到主屏幕?
我有一個很熟悉的問題。對update()方法的調用發生在顯示配置活動之前。我發現沒有辦法改變這種行爲。 – mrd 2012-05-13 21:00:24