如何使一个图像Getter在RecyclerView使用fromHTML更有效?



我使用fromHTML将HTML文本加载到一个RecyclerView元素中的TextView中。这确实有效,但是它非常慢,因为图像是从一个URL加载的,当适配器被设置或更新时,应用程序会冻结或崩溃,我得到的日志说主线程上正在完成太多的工作。有没有办法使ImageGetter在html。fromhtml,我使用更有效,使适配器运行在一个单独的线程更新时,所以它不会冻结应用程序?我试过寻找更快的方法来获得一个Drawable,但主要的图像加载库似乎没有办法返回一个Drawable对象。

看起来行Boolean result = fiu.execute().get();正在阻塞UI线程,并且正在击败AsyncTask的目的。您应该考虑在onPostExecute()中使用回调来设置图像。

不幸的是,网上没有很多关于如何实现Html.ImageGetter的信息。我在这里回答了一个问题,该问题涉及在模拟背景线程上加载实际图像时更改占位符图像。问题中提出的解决方案也有效,但需要操作和重新扫描HTML文本。

我认为你可以从那篇文章中借鉴一些东西来解决你的问题。

更新:我认为更好的解决方案是使用诸如Glide之类的库来加载可绘制的内容。如果库不能本地处理您的用例,请查看其他人是如何处理该限制的。请参阅此处了解其中一种方法。我认为这个Stack Overflow的答案可能对你有用。在onResourceReady()中,您可以设置文本与加载的图像。

第二次更新:我会多调查格莱德。你可以创建一个名为"modelloader"的自定义加载器。它可以获取你的流drawables。关于如何编写ModelLoader,请参阅这里和这里的示例。(不知道这个例子是否有效,但它看起来不错。)

最新更新