我有一个应用程序下载时间表,并保存它,它也定期下载这个时间表的变化。我目前使用的是单例,但从设计的角度来看,我觉得这很难看。由于需要下载,我需要一个集中式系统来最小化网络使用。
在当前情况下,每个需要从单例进行更新的类都会首先获取该单例的一个实例,然后提供一个接口,当需要更新时会调用该接口的某些方法。目前,单例在工作线程中处理所有的下载。通常我会使用从Activity调用的AsyncTask,但是因为我也必须将结果发送到小部件,所以我看不到这项工作。
另一种选择是使用服务。我会简单地从小部件和活动绑定到它。这种情况下的问题是我不能从BroadcastReceiver ( AppWidgetProvider就是这样)绑定。问题是我不能定期更新我的小部件。
我的问题是:我如何(或者:我可以)设计我的应用程序,使我可以从服务更新我的小部件(以便摆脱单例),或者有更好的方法(也许是BroadcastReceivers)?
发布于 2012-01-08 21:32:42
我如何(或者:我可以)设计我的应用程序,以便我可以从服务更新我的小部件(以便摆脱单例),或者有更好的方法(也许是BroadcastReceivers)?
要更新应用程序小部件,请在AppWidgetManager上调用updateAppWidget()。这可以在任何时候完成,而不仅仅是从AppWidgetProvider。
要定期更新应用程序小部件,可以在应用程序小部件元数据中使用android:updatePeriodMillis,也可以直接设置AlarmManager。在任何一种情况下,您都会希望将工作委托给IntentService,因为“下载时间表”是而不是您想在主应用程序线程上执行的操作-- IntentService为您提供了一个后台线程,并在您的工作完成时自动停止,因此您不会占用内存,除非您正在进行工作。
要定期执行一般的工作,请使用AlarmManager和IntentService。作为其工作的一部分,IntentService可以根据需要更新应用程序小部件。
https://stackoverflow.com/questions/8777455
复制相似问题