suchen

Heim  >  Fragen und Antworten  >  Hauptteil

imageloader - android 大量图片加载导致的内存问题

迷茫迷茫2773 Tage vor770

Antworte allen(8)Ich werde antworten

  • ringa_lee

    ringa_lee2017-04-17 15:50:42

    android:largeHeap="true"

    图片墙加载完就需要90%+的内存了,developer.android.com/training/displaying-bitmaps/process-bitmap.html用的官方教程也有bitmap内存泄漏问题,每次进入退出activity内存增量都为1%左右,而且加载的最大图片数量几乎一致!!

    怀疑android本身没有做好处理bitmap的问题

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-17 15:50:42

    先不谈工具理想不理想,要降低内存使用如何做?
    通常的方式是通过Options.inSampleSize来进行抽样,会造成图片质量下降,但是有效.
    universal-imageloader提供的config里虽然有相关的配置,但是看过源代码就会发现,默认的几种配置在图片小于屏幕分辨率的时候并不会缩小.因此如果你有一个分辨率较高的手机,那么大部分情况下universal-imageloader会以inSampleSize=1来进行处理,也就是不做抽样.
    所以我的处理方法是在他的源码基础上进行修改,增加几个抽样的维度,即使图片已经小于当前屏幕的分辨率,仍然可以控制他进行抽样.对比原有的配置,这样做内存使用成本减少(抽样大小+1内存使用应该是减少75%)理论上图片效果会差一些,但实际上手机分辨率虽然一直在提高但是尺寸无非4-6寸之间,对于缩略图来说,这点损失肉眼根本判断不出来,高质量图片在大图中展示即可.
    另外对于imageloader,.bitmapConfig(Bitmap.Config.RGB_565)也可以减少内存使用,官方文档里有说明.
    另外你说反复进出activity会有这个问题,你可以尝试手动回收一下图片.这块结合这几个框架我没试过,自己试试吧.

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:50:42

    "反复进"才溢出, 可能有内存泄漏.
    你可以dump一下heap, 看一下谁持有bitmap的引用

    Antwort
    0
  • 阿神

    阿神2017-04-17 15:50:42

    "activity里面一有一百多张图片"
    你全部要显示? 肯定只显示一部分啊。
    其他的等滑到对应的位置再显示

    Antwort
    0
  • 黄舟

    黄舟2017-04-17 15:50:42

    百度:image-loader,有很多android的一些第三方jar包,很好用,xutils等等

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:50:42

    动态加载,只显示你当前显示的,不需要的将对应的bitmap也释放掉

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:50:42

    可以使用分页加载

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:50:42

    OOM溢出的话那一定是java层有泄露,用MAT分析一下引用情况吧
    android:largeHeap="true"的方式也无非是延缓一下OOM的出现而已

    Antwort
    0
  • StornierenAntwort