06-27 13:54:49.702: E/dalvikvm-heap(6414): 26496-byte external allocation too large for this process.
06-27 13:54:49.702: E/GraphicsJNI(6414): VM won't let us allocate 26496 bytes
06-27 13:54:49.702: E/Bitmap(6414): nativeCreate,createBitmap OutOfMemoryError
06-27 13:54:49.714: W/dalvikvm(6414): threadid=1: thread exiting with uncaught exception (group=0x400257f0)
06-27 13:54:49.722: E/AndroidRuntime(6414): FATAL EXCEPTION: main
06-27 13:54:49.722: E/AndroidRuntime(6414): java.lang.NullPointerException
06-27 13:54:49.722: E/AndroidRuntime(6414):  at android.graphics.Bitmap.createBitmap(Bitmap.java:460)
06-27 13:54:49.722: E/AndroidRuntime(6414):  at android.graphics.Bitmap.createBitmap(Bitmap.java:376)
06-27 13:54:49.722: E/AndroidRuntime(6414):  at com.lc.runfasta.GameView.CreateCard(GameView.java:1687)
06-27 13:54:49.722: E/AndroidRuntime(6414):  at com.lc.runfasta.GameView.onDraw(GameView.java:562)在模拟器上、中兴的一款机器上都没有这个报错,但是在华为的一款机器上就会报错。
我的图片是320*480的,经过自适应拉伸适合480*800的。
就是在分辨率调整之后出现的这个问题,之前没有出现过。各位,有遇到类似的问题么?
我试探着把这张用过的图片 ,使用过后直接tempbmp.recycle(),也不行啊,因为这张图片反复用很多次。

解决方案 »

  1.   

    不是机器的问题。OOM是内存不够,不是recycle就可以的。可以使用java的软引用来解决OOM的问题。或者大量图片使用gallery让系统来解决。
      

  2.   

    在java中,如果一个对象没有引用可以使用System.gc();进行回收
      

  3.   

    这个貌似是android上对所有Bitmap对象的总内存限制引起的问题吧
      

  4.   


    的确是BMP对象的内存限制问题。但是还是想不通,为什么只在某一台机器上报错,每次必爆,其余的手机,都是好好的。
      

  5.   

    2楼是正解,需要使用软引用来解决这个问题。Bitmap的recycle函数,实际上只是设置了一个标志位,并没有释放内存。
      

  6.   

    不同的手机平台,可能会根据自身内存的情况,修改Bitmap可使用的内存上限。