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

标签 java android android-appwidget

我有一个应用程序可以下载时间表并保存它,它还定期下载对此时间表的更改。我目前正在使用单例,但从设计角度来看我发现这很丑陋。由于下载量很大,我需要一个集中式系统来最大限度地减少网络使用。

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

另一种方法是使用服务。我只需从小部件和 Activity 中绑定(bind)到它即可。这种情况下的问题是我无法从 BroadcastReceiver(AppWidgetProvider 就是)进行绑定(bind)。问题是我无法定期更新我的小部件。

我的问题是:我如何(或者:我可以)设计我的应用程序,以便我可以从服务更新我的小部件(为了摆脱单例)或者是否有更好的方法(也许广播接收器)?

最佳答案

how can I (or: can I) design my app in such a way that I can update my widget from a service (in order to get rid of the singleton) or is there a better way (maybe BroadcastReceivers)?

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

要定期更新应用小部件,请在应用小部件元数据中使用 android:updatePeriodMillis,或者直接自行设置 AlarmManager。无论哪种情况,您都希望将工作委托(delegate)给 IntentService,因为“下载时间表”不是您想要在主应用程序线程上执行的操作 -- IntentService 为您提供一个后台线程,并在您的工作完成时自动停止,因此除非您正在积极工作,否则您不会占用 RAM。

要定期执行一般工作,请使用 AlarmManagerIntentService。作为其工作的一部分,IntentService 可以根据需要更新应用程序小部件。

关于java - 如何从应用程序更新小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777455/

相关文章:

android - 按下返回键后如何保持 AutoCompleteTextView 的 DropDownList 打开?

android - Activity/服务和小部件提供者之间的通信?

android - 从 Android AppWidget 播放/控制歌曲

java - 请解释此正则表达式的输出(以正面前瞻开头)

java - 阅读 Maven 配置文件属性的问题

java - 尝试创建签名 APK 时出错 - 魔数(Magic Number)不匹配

android - react native : Failed to notify project evaluation listener. > JAVA_LETTER_OR_DIGIT

android - 如何从 Android AppWidget 启动 Activity?

java - 如何在 SWT 表头中放置一个 "(de)select all"复选框?

java - 无法运行 JFlex 生成的词法分析器 Java 文件