1

我有一个小部件,它用一些下载的信息填充列表,其中包括从给定 URL 下载的图像。

我想使用 setImageViewBitmap 和从 URL 创建的位图来显示此图像。我可以成功创建位图,但我遇到了一个问题:

当我使用:

itmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(item.getPosterUrl()).getContent());
remoteViews.setImageViewBitmap(R.list_item.poster, bitmap);

图像已成功显示在小部件列表中,但是下载有点慢(通常这应该在任何网络操作中完成)所以我想使用线程在后台执行下载,而用户可以看到其余部分名单。

我的问题是,当我使用线程时,下载执行良好,但 remoteViews 没有更新图像。我也尝试使用具有相同结果的处理程序。

也许我需要像 runOnUIThread 这样的东西,但我没有找到类似的小部件方法。

我能做些什么?

提前致谢,

4

1 回答 1

3

步骤#1:下载图像。

步骤#2:下载完成后,使用图像通过 aRemoteViews和 an更新应用小部件AppWidgetManager

更新

为了澄清一点,您不能可靠地直接在主应用程序线程上调用AppWidgetProvider--下载某些东西onUpdate(),因此下载可能需要太长时间。

但是,onUpdate()可以将其工作委托给IntentService下载图像并更新应用小部件本身的应用程序。AppWidgetProvider是更新应用小部件的地方,但您应用中的其他代码也可以更新应用小部件。只需让您IntentService创建RemoteViews、获取AppWidgetManager并进行更新。

于 2012-04-26T22:37:40.277 回答