2017-03-12 91 views
0

好的,所以我有這個很奇怪的問題,我會用一個例子來解釋它。背景圖像內存不足

可以說我有2個活動:ActivityOne,ActivityTwo。當按下在ActivityOne一個按鈕,它打開ActivityTwo(意圖)

我在@drawables 2個背景圖像:onebg(大小= 31K),twobg(大小= 30K)

onebg是在ActivityOne的背景。 當試圖創建ActivityTwo的背景時,它會崩潰並出現Out of Memory錯誤。

但是,將onebg設置爲ActivityOne和ActivityTwo的背景時,它都可以工作。還沒有嘗試設置twobg爲他們兩個,但我想這將最有可能的工作。

onebg和twobg都是由我在Photoshop中製作的,它們是相同類型和所有東西,只是因爲文本不同而大小不同。

回答

2

我想你沒有正確理解位圖的堆分配。

每個位圖在堆中分配的大小不取決於其大小!這取決於它的尺寸!

允許有一個例子:

你有30KB的大小和1000 * 500像素的尺寸的位圖。的存儲器的量被確定這種方式:

1000 * 500 * 4(其因爲每個像素應包含ARGB 信息)

所以在具有低堆設備你將不得不與這種圖像問題大小。

還要注意@Drilon提示。 你也應該注意內存泄漏。

富勒更多信息,請參考此鏈接從谷歌

Loading Large Bitmaps Efficiently

+0

兩幅圖像的尺寸完全相同,這就是爲什麼我很困惑。所有使用過的drawable是否有最大空間? (所有使用的drawable只能達到 k)?如果是這樣,我怎麼能增加它,它有可能只有60k? – Tom

+0

是的,每個設備都有一個最大的堆。它的VM給你的應用程序的RAM的數量。最好的方法是使用較小的文件。 你可以在應用程序標籤的清單中添加largeheap = true,但它只是給你多一點空間而不是全部! @Tom –

+0

非常感謝。我實際上減少了兩個背景的尺寸,現在它可以工作。 – Tom