最近做一个应用,用textview显示html,当其中含有img标签时后台异步下载图片,下载完成后前台刷新显示,但是当图片过大时,下载显示总会崩溃。有什么好的方法呢?求助一下

解决方案 »

  1. BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 8;
    options.inJustDecodeBounds = false;
    bmp = BitmapFactory.decodeStream(e.getContent(), null, options);压缩
      

  2. 我试过了,还是会崩溃。主要是listview里面图片太多时就可能发生溢出
      

  3. 1.大图片读取采用压缩
    2.listView加载图片,用软引用把图片缓存,每次读图片时先从缓存里读取,没读取到再去下载图片到缓存。
    除了软引用,还可以采用sd卡缓存,把图片缓存到本地,可以大大提高速度
      

  4. 安卓的OOM内存溢出问题太常见了,给你三个建议。
    1.读Google提供的图片处理优化原文
    http://developer.android.com/training/displaying-bitmaps/index.html2.中文翻译
    http://blog.csdn.net/h3c4lenovo/article/details/81196193.使用第三方的优化包处理图片
    如aQuery.jar还有中国人写的afinal.jar,这些在OSChina网站可以连接到。
      

  5. 以前找到过一个算法可以算出重新采样率,然后把图片重新采样下就可以了,具体代码记不清了,方法名好像是subSample
      

  6. 压缩是必须的,还有listview可以进行分页读取啊,你不会一次性去读取所有数据吧,让服务端做一个分页就行了,还有建议使用google官方的一个图片缓存机制,ImageFetcher什么的,自行百度。
      

  7. 看了下,感觉很有收获,现在能正常显示,但是图片多时listview上下滑动会有卡住的感觉
      

  8. http://www.cnblogs.com/nanguabing/archive/2012/12/09/2810446.html加载10M图片 没有内存溢出 楼主可以用bitmap不要R.id的形式
      


  9. 容易卡住的原因是过多的占用UI线程处理数据了。这属于你的设计问题,需要自己看代码分析了。
    给你的建议是进入页面之后开启一个线程池,所有获取的动作全部放在线程里执行,线程处理完之后再通知listview重绘。如果线程处理很快,就需要设置一个机制比如每隔Ns才会通知UI重绘。
    要记住的是UI线程只绘制UI。
      

类似问题 »