我已阅读有关App Widgets的开发者指南,并且我已了解为避免ANR错误,您应该在 AppWidgetProvider 的 onUpdate 方法中启动服务更新小部件...我对这样的服务有疑问:当我们开发可以从活动开始的标准服务时,我们应该避免在 onStartCommand 中进行太长时间的计算,因为 onStartCommand 方法在主UI线程中运行..因此,我们是否应该避免在 AppWidgetProvider 启动的服务的 onStartCommand 内进行长时间计算我们没有风险阻止UI?如果在这种情况下我们必须避免 onStartCommand 中的长计算,我们可以在服务中启动工作线程,还是使用Intent服务?在这种情况下,我们可以从我们想要的任何线程使用 AppWidgetManager 的 updateAppWidget 方法更新窗口小部件,还是有可能从UI线程外部更新UI?
我希望问题很清楚......
答案 0 :(得分:1)
您可以从onUpdate启动Intent Service,然后照常使用AppWidgetManager从服务更新窗口小部件。这并不意味着您要在UI线程之外更新UI。即使从onUpdate更新窗口小部件,您也在使用RemoteViews和AppWidgetManager,而不是直接更新UI。 AppWidgetManager实际上调用了更新小部件的内部Android服务,因此您无需担心它。
我认为小部件的UI线程在启动器中,但我不确定。在任何情况下,小部件的代码都不会在该线程上运行,这就是我们拥有RemoteViews的原因。