2012-03-05 20 views
0

我有模拟器绘制一个大的图像时崩溃的问题导致NullPointerException异常。在drawable上使用setBounds时,崩溃是由NullPointerException导致的(所以我的drawable由于某种原因而为null)。大型图像在模拟器

该问题仅出现在模拟器中,而不是如果我加载到我的设备(HTC Desire的)。

我的形象是1080x1658像素的JPG。如果我指定一个更小的图像,问题就会消失。

我的代码如下所示:

public class Map { 

    private Drawable mapImage; 

    public Map(Context context) { 
     mapImage = context.getResources().getDrawable(R.drawable.north); 
    } 

    public void render(Canvas canvas) { 
     mapImage.setBounds(0, 0, 1080, 1658); 
     mapImage.draw(canvas); 
    } 

} 

回答

1

你检查,如果你的应用程序的堆过大?你可以在eclipse上用DDMS来做到这一点。 具有该尺寸的图像可能会导致严重问题。

而且一定要回收旧的位图,使一些空间,新的 - 他们是在Android的最棘手的事情之一。

您可以增加模拟器的堆大小的设置,太 - 但是这并不代表现实,很多设备的只有约32 MB的堆。

+0

您好,我试图寻找在Eclipse中的DDMS角度堆的大小,但由于虚拟机崩溃的进程关闭之前,我可以看到堆的大小(当我用大图打开活动时)。然而,我有另一个应用程序共享代码库,但使用较小的图像(900x952),这个应用程序不会崩溃,从我可以告诉堆应用程序永远不会超过6,070 MB,所以我想我是在模拟器的默认24 MB? – mat 2012-03-06 07:39:15

1

尝试增加你的模拟器的最大VM应用程序堆栈大小,以高得多的价值,你可以去点击编辑和更改您的AVD此值。基本上,这会增加分配给仿真器上每个进程的内存量,请注意,默认情况下,这会在您的真实设备上设置为更高的值。

enter image description here

类似的问题:http://androidforums.com/application-development/48495-memory-size-emulator.html

+0

我认为更大的堆大小将帮助他使用他的应用程序,但并不能反映真实情况,因为大量的设备只有大约32 MB的堆大小。 – Tim 2012-03-05 08:31:51

+0

指出Tim,Mat,您需要确保您为较小的设备使用较小的图像,以便它不超过该设备的堆大小。如果您只需要解决当前的模拟器问题,那么现在可以增加堆大小。 – Soham 2012-03-05 08:39:58

+0

在模拟器中增加我的堆大小似乎并不能“解决”这个问题。虚拟机仍然崩溃。 – mat 2012-03-06 07:32:21