产生了许多AsyncTask实例 - 含义?

时间:2016-07-15 15:10:31

标签: android android-asynctask bitmapfactory

我正在设计一个定位> = API 17的Android应用程序。我创建了一个类DownloadImageTask,它扩展了AsyncTask,并接收一个字符串(URL)和一个ImageView作为参数。在其中,我打开HTTP连接,从URL下载图像,并使用BitmapFactory从数据创建Bitmap对象,然后将位图设置为ImageView。最终结果是一个填充的数据列表,用户可以滚动浏览,并尽可能填充图像。

这似乎是表面上的一个好设计 - 但我担心我的应用程序面临OOM条件或其他违反用户体验规则的风险。我想知道我设计的方式是否正确,或者如果没有,我应该如何处理。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

对您自己的方法的两个考虑因素:

  1. 您不应该将ImageView传递给异步任务,因为这样您就可以耦合视图和服务层。因此,向async任务发送URL,并向Activity调用onPostExecute方法调用实现updateView(或类似)方法。
  2. 关于你的OOM,你是对的。如果您使用可能具有比所需更高分辨率的原始位图,则可能会出现此问题。因此,您应该缩小保留在内存中的图像。
  3. 如果你使用一些图像,最后一个问题可能并不困难,否则可能会有问题。因此,如果您要处理大量图像并且不必强制实现自己的版本,则应该查看现有库。有人已经提到: