如何从应用程序更新小部件?

时间:2012-01-08 12:23:35

标签: java android android-appwidget

我有一个下载时间表并保存的应用程序,它还定期下载更改到此时间表。我目前正在使用单身人士,但从设计角度来看,我觉得这很难看。由于下载,我需要一个集中式系统来最小化网络使用。

在当前情况下,每个需要单例更新的类首先获取此单例的实例,然后提供一个接口,在需要更新时调用某些方法。目前,单例处理工作线程中的所有下载。通常我会使用从Activity调用的AsyncTask,但是因为我必须将结果发送到小部件,所以我看不到这个工作。

替代方案是使用服务。我只是从小部件和活动绑定到它。在这种情况下的问题是我无法从BroadcastReceiver(AppWidgetProvider是)绑定。问题是我无法定期更新我的小部件。

我的问题是:我怎么能(或者我可以)设计我的应用程序,以便我可以从服务更新我的小部件(为了摆脱单例)或者有更好的方法(也许) BroadcastReceivers)?

1 个答案:

答案 0 :(得分:1)

  

我怎么能(或者我可以)设计我的应用程序,以便我可以从服务更新我的小部件(为了摆脱单例)或者有更好的方法(也许是BroadcastReceivers)?< / p>

要更新应用小部件,请在updateAppWidget()上致电AppWidgetManager。这可以在任何时候完成,而不仅仅是AppWidgetProvider

要定期更新应用小部件,请在应用小部件元数据中使用android:updatePeriodMillis,或直接自行设置AlarmManager。在任何一种情况下,您都希望将工作委托给IntentService,因为“下载时间表”您希望在主应用程序线程上执行某些操作 - {{1}为你提供了一个后台线程,并在你的工作完成后自动停止,所以除非你正在积极地工作,否则你不会占用RAM。

要定期开展一般工作,请使用IntentServiceAlarmManager。作为其工作的一部分,IntentService可以根据需要更新应用小部件。