我现在从服务器上接受TCP包,这个包中有很多张图片数据,大概5兆,大概有150张图片,我先用bytearrayoutputStream接收完tcp包,在通过处理,把每张图片分析出来(一种是每张图片一个byte[],然后放到list中,一种是转化成bitmap放到list中)然后再listview中显示,这样就会报内存溢出,我模拟器的最大堆栈内存是25M,请教高手,我要怎么解决这问题呢

解决方案 »

  1.   

    图片数据不是说你看到的文件多大,占用内存就多大的。如果你把它显示出来,那么就是4xWxH,而且是2的幂方 150张图片如果转成bitmap的话,那占用的内存远远超过25ml了。
      

  2.   

    我就算不显示出来指接收存到bytearrayOutputStream中如果是6兆的图片也会内存溢出,在接受过程中有可能会达到25兆吗,这是不是tcp缓存的原因
      

  3.   

    跟tcp缓存没关系,很可能是你原来程序就已经占用了一部分内存了,然后如果你缓冲区过大的话,可能就导致内存超过进程限制。要知道缓冲区的增长一般都是两倍增长的 在接收前你输入 
    adb shell dumpsys meminfo 你的进程名(如com.xxx.xxx) 看看到底使用了多少内存
      

  4.   

    adb shell dumpsys meminfo 这命令在哪里输呢,我在eclipse的heap中看是用了2兆多