2012-03-05 24 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