我正在研究壁紙應用程序。我將所有圖像存儲在Drawable文件夾中。使用可繪製位圖的內存不足錯誤
當我添加超過30張壁紙時,我得到了OutOfMemoryError
。我想知道如何克服這一點。
我是否應該將所有圖像保存在SQLite Database
中,然後從那裏加載或者我需要做其他事情。
我試圖通過Decode Bitmap Factory
調整位圖大小,但它並沒有達到我的目的,因爲圖像質量下降。
我正在研究壁紙應用程序。我將所有圖像存儲在Drawable文件夾中。使用可繪製位圖的內存不足錯誤
當我添加超過30張壁紙時,我得到了OutOfMemoryError
。我想知道如何克服這一點。
我是否應該將所有圖像保存在SQLite Database
中,然後從那裏加載或者我需要做其他事情。
我試圖通過Decode Bitmap Factory
調整位圖大小,但它並沒有達到我的目的,因爲圖像質量下降。
在解碼時調整圖像大小隻會使您的OutOfMemoryError
及時提前。該錯誤意味着您的應用程序泄漏了內存,或者嘗試使用比可用內存更多的內存。在Android上使用位圖時,這種情況經常發生,因爲限制大約設置爲25MB,並且高分辨率屏幕越來越普遍。
你必須重新設計你的應用程序。沒有必要在內存中保留30張圖像,因爲它們不能放在一個屏幕上 - 如果它們是縮略圖大小,則在解碼時將它們全部調整大小,並且內存中的像素總數與一個大的圖片,所以你不會用完內存。
你必須找到recycle()
位圖的方式,當它們不可見時。如果您更好地描述您的應用程序,我們可以幫助您找到合適的時機,也可以預加載圖像以獲得響應式應用程序和更好的用戶體驗。
其實在我的應用程序中,我在主頁上顯示壁紙的類別,然後如果用戶點擊某個特定的類別,那麼該類別中的所有壁紙顯示在滾動視圖中,並且用戶選擇特定壁紙作爲他的壁紙。 –
你什麼時候遇到錯誤? – Raffaele
當我在Emulator上運行我的應用程序時,它崩潰,並在Logcat中顯示OutOfMemory異常。當我減少圖像的數量比完美運行,我沒有得到任何錯誤。 –
我認爲你需要做的是在屏幕上顯示Thumbnails
而不是可繪製的圖像。您可以生成Thumbnails並根據您的尺寸要求進行顯示。並且每當用戶點擊Thumb
時,只需取原路徑並設置壁紙即可。
另一種選擇是您可以使用Universal Image Loader,它可以幫助您緩存光盤中的圖像(如SD card
或您的應用程序的Internal memory
)。所以問題Out of Memory
可以解決。
我會嘗試你提到的程序,然後讓你知道。 –
如果你想控制你的應用程序崩潰,然後再編寫代碼異常塊:
try {
...
}
catch(OutOfMemoryError error) {
//decide what to do when there is not more memory available
}
還請了此鏈接:
我試圖避免使用OutOfMemory,因爲當它到來時我什麼也做不了。 –
你試圖實現懶加載概念? –
我是新來的機器人,所以我不知道懶編碼..... –