簡體   English   中英

圖片占用太多堆空間

[英]Images take up too much heap space

我遇到了一個奇怪的問題 - 我正在制作一個 android 游戲,並注意到每隔幾秒就會出現延遲,並在我注意到垃圾收集器每隔幾秒被調用一次 50-150 毫秒時檢查日志。

當我使用一張背景圖片(150kb)啟動我的標題屏幕活動時,我已經將這個問題歸結為圖像——我得到的消息是:

4% 免費 (8009k/8259k) 將堆增長到 9.012MB GC_CONCURRENT 釋放 1kb (9178k/9479k)

這是一個圖像和三個按鈕的大量堆空間。 當我刪除圖像時,我沒有收到任何警告或消息(不確定如何在堆空間上強制輸出,但我希望它處於正常水平)

活動圖像的代碼並不是那么令人興奮,因為它只是一個標題屏幕,但是:

    <ImageView
    android:id="@+id/backgroundImage1"
    android:contentDescription="Image"
    android:src="@drawable/openingscreen" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="top"
    />

當我啟動實際游戲時,堆大小再次增加(僅增加了幾 mb)——奇怪的是,當我沒有標題屏幕時,主游戲的堆空間仍然是 12 mb 左右——所以我我在想,也許這張圖片包含了對其他所有東西的引用。 雖然我嘗試使用大小為 1 像素的背景圖像,但這沒有造成任何問題。

其次,gameThread內部圖片的代碼:

mPlayer = Bitmap.createScaledBitmap(mPlayer, mCanvasWidth / 15, mCanvasHeight / 8, true);

canvas.drawBitmap(mPlayer, xPosition, yPosition, null);

我確實在某處聽說縮放位圖會導致內存問題,但這並沒有真正與其他所有事情相加。

是的,很多開發者在開發過程中都遇到過這種情況。

我會要求你做的是徹底研究檢查這個堆到底是什么,垃圾收集器如何處理它,你如何有效地使用甚至縮放位圖

您可以先從觀看此視頻Google Android 內存管理開始

接下來在android開發者網站,詳細介紹高效顯示位圖

最后也是最后一件事是養成使用 MAT(內存分析器工具)的習慣,有很多教程、課程,關於如何使用它以及找出應用程序被剝奪內存的位置和原因的博客

以下公式告訴您圖像占用多少堆空間:寬 x 高 x 8 字節。 所以一個全白但尺寸很大的圖像仍然會占用大量的堆空間。

剛剛更新,我發現了我的代碼中的主要問題並設法讓它順利運行,我懷疑其他人是否愚蠢到犯同樣的錯誤,但我會發布我的解決方案以防萬一!

我在游戲的每次迭代中都重新調整我的圖像大小,我不知何故沒有意識到我把代碼放在那里,改變了它,所以它在一開始就重新調整了它們的大小,就是這樣。 但就是這樣,我懷疑這個解決方案會幫助任何人,但也許有一天它會!

凱文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM