2012-01-08 107 views
0

我有一個應用程序下載一個時間表並保存它,它也定期下載這個時間表的變化。我目前正在使用單身人士,但從設計的角度來看,我覺得這很醜陋。由於下載,我需要一個集中式系統來最大限度地減少網絡使用。如何從應用更新小部件?

在當前形勢下,每個需要更新從單首先獲得此單的一個實例,然後提供了當需要更新被稱爲特定方法的接口類。目前單身人士處理工作線程中的所有下載。通常我會使用從Activity中調用的AsyncTask,但是因爲我必須將結果發送到Widget,所以我看不到這個工作。

替代是使用服務。我只是簡單地將Widget和活動綁定到它。在這種情況下,問題是我無法從BroadcastReceiver(AppWidgetProvider)綁定。問題是我無法定期更新我的小部件。我的問題是:我如何(或:我可以)設計我的應用程序,以便我可以從服務更新我的小部件(爲了擺脫單身人士)還是有更好的方法(也許BroadcastReceivers)?

回答

1

我該如何設計我的應用程序(我可以通過服務更新我的小部件(爲了擺脫單身人士)還是有更好的方法(可能是BroadcastReceivers )?

要更新應用窗口小部件,請致電updateAppWidget(),電話號碼AppWidgetManager。這可以在任何時候完成,而不僅僅是從AppWidgetProvider

要定期更新應用程序小部件,請在您的應用程序小部件元數據中使用android:updatePeriodMillis,或者直接自行設置AlarmManager。在這兩種情況下,你會想工作委託給一個IntentService,如「下載時間表」是要在主應用程序線程做一些事情 - IntentService給你一個後臺線程,並自動停止本身當你的工作是完整的,所以除非你正在積極工作,否則你不會佔用RAM。

做一般工作定期,使用AlarmManagerIntentService。如果需要,作爲其工作的一部分,IntentService可以更新應用小部件。

+0

下載沒有在特定時間執行,因此,我將使用一個處理器來代替AlarmManager。否則:謝謝,它澄清了分配。 – Boude 2012-01-08 14:28:11

+1

@Boude:「下載並沒有在特定時間執行,因此,我將使用一個處理器來代替AlarmManager」 - 一旦你的進程被終止,你的'Handler'消失。 'AlarmManager'是一個更好的定期下載解決方案,如果這些下載應該發生,即使您的UI不在前臺。 – CommonsWare 2012-01-08 14:58:57

+0

當小部件可見時,必須執行下載。只有當活動和小部件都不可見時才需要下載。我想我會在測試我的alpha時嘗試兩者,並根據一些用戶體驗做出我的決定。我會非常仔細地考慮你的觀點,謝謝。 – Boude 2012-01-08 19:42:19