2010-08-22 107 views
3

我正在爲我的應用程序開發Android AppWidget。爲了更新我的appwidget,我需要從網絡下載數據。但是當我嘗試在onUpdate方法中這樣做時,我的appWidget被Android系統所殺死。我知道耗時的操作不能在接收器中完成,所以我從onUpdate方法啓動了一個服務並從中啓動了一個線程。但問題仍然存在。 任何人都可以讓我知道如何在Appwidget中進行網絡操作?Android:Appwidget中的網絡操作

回答

3

將下載工作委託給服務,可能是IntentService,可能是WakefulIntentService,具體取決於是否存在設備在工作期間可能會入睡的風險。

您的AppWidgetProvider只會在您的IntentService上撥打startService()

IntentService'sonHandleIntent()方法將你目前有工作onUpdate(),取得自己AppWidgetManager通過靜態getInstance()方法。但是,由於onHandleIntent()在後臺線程上執行,因此可以根據需要儘可能多地佔用時間。 IntentService也會在完成所有未完成的工作請求後自動關閉。

+0

但如何結合使用RemoteViewsService?應該提到IntentService在異步操作完成後啓動RemoteViewsService? – Malachiasz 2014-02-05 15:47:27

+0

@Malachiasz:「應該在異步操作完成後提及IntentService啓動RemoteViewsService?」 - 沒有。 'RemoteViewsService'將被應用構件框架自動使用。您需要確保「RemoteViewsService」知道「IntentService」所做的任何數據更改,例如「IntentService」更新RemoteViewsService需要從中提取的數據庫。應該有一種方法來獲取應用部件,然後從'RemoteViewsService'重新加載它的視圖,儘管我還沒有研究過它,也不知道如何完成它。 – CommonsWare 2014-02-05 16:00:15