2013-05-16 63 views
0

我正在寫一個馬里奧風格的遊戲,其中一組瓷磚在表面視圖上繪製。我創建了一個Tile()類,其中包含一個公共位圖和一個返回單個幀的方法(如果有動畫片)。該類用於公共靜態數組。使用Bitmap.createBitmap導致GC_CONCURRENT消息

雖然提高瓦片的位圖(25此刻)的編號i得到越來越多的在蝕這些消息:

d/dalvikvm(1819):GC_CONCURRENT釋放414K,43%的遊離3181K/5568K,暫停73ms + 92ms,共224ms

它開始變得非常滯後。難道我做錯了什麼?我想將位圖保存在內存中,因爲它們一直在使用。

[編輯:] 我想出的是,線

returnBitmap = Bitmap.createBitmap(bmpRight, pixelPos, 0, spriteBmpWidth, spriteBmpHeight);

原因此。有沒有辦法避免它? :/

+0

見相關帖子http://stackoverflow.com/questions/7110351/how-to-prevent-gc-concurrent-statements- in-logcat – harsh

回答

0

爲了讓您的圖像還活着,你需要把它們放在你的類的頂部,是這樣的:

public class A{ 
    Bitmap a; 
    Bitmap b; 
    public void ... 
} 

和GC在您的A班正在使用時不會觸碰它們。 如果您將在方法中創建位圖 - 它們將在方法運行時保持活動狀態。事情是這樣的:

public void test() 
{ 
    Bitmap a; 
    Bitmap b; 
} // on this moment GC will delete images from memory 

你可以閱讀更多關於GC工作在this link

+0

謝謝,我想我已經做到了。我剛纔發現沒有存儲的圖像導致錯誤。從動畫中返回單個位圖的方法可以實現這一點。我試圖把所有的Bitmaps放在類的頂部或使它們變成靜態的,但它似乎沒有幫助:/ – hndr

0

增加JVM的堆大小,對於Java遊戲來說,5M可能非常小,如果將BitMaps放在內存中,則可能非常小。 用-Xmx100m運行您的Java程序以將堆大小增加到100M

您看到的消息來自JVM垃圾收集器釋放內存時的調試日誌。

[編輯]起初沒有看到,你是在Android: -/

相關問題