最近做的一个东西遇到麻烦了,很多的bitmap造成了OOM问题
有2个问题想请教:
1、在布局里面声明了imageView,在布局里面也直接写了src的图片。
   在代码里面声明了
private ImageView m= null;
           m=(imageView)findViewById(R.id.xxxxx)请问 那个 imageView 是在赋值给M的时候才分配空间的么?2、bitmap在decode的时候会不会额外消耗内存空间比如说,一个bitmap btm,decode之后内存消耗1M,在decode过程中,会不会额外消耗内存空间

解决方案 »

  1. 我觉得跟一个指针差不多。m=null的时候相当于指向空,findViewById后相当于指向了你实际的ImageView。你要用ImageView对象肯定是要用m,所以要先给他赋值才能用,不然就会出现空指针异常。另外,OOM的异常应该不是你的ImageView引起的,而是你给Biemap的图片太大引起的。不知道对不对,仅供参考
      

  2. 我想问,就是他什么时候会在内存里面给这个imageView开辟空间,是执行到赋值这里才分配内存么?
    这个确实是内存引起的,所以我想多知道点关于imageView和bitmap decode在内存方面的知识
      

  3. Bitmap在decode时,也会消耗内存的其实现实在JNI部分代码里建议你在decode后,最好调用recycle方法,进行回收资源
      


  4. 我的意思是会不会额外消耗。比如说,我申明 bitmap 变量的时候,他应该是没内存空间的,然后我用他的decode,把一个图片给他,这个时候他就应该是这个图片对象的大小。比如这个图片decode过后是1M吧,貌似大了但是在decode过程中,他的内存开销是大于1M么?
      

aliyun

类似问题 »