0

我得到隨機溢出異常導致我的應用程序內存異常。內存溢出佈局異常

我有7個片段(難度)活動,通過按鈕啓動自己的活動。每個片段都有一個帶有30個按鈕(水平)的滾動視圖。 我已經設置好了,這樣我就可以滑過每個片段,片段佔據了整個屏幕。

偶爾當我滑動幾次,然後從一組30個隨機按鈕中選擇一個,它會崩潰。它會嘗試加載活動,並在隨機行上發生內存異常併發生膨脹異常。該行總是落在xml文件中的imageView或imageButton上。加載的活動是imageViews和imageButtons的網格。

我沒有得到太多的例外,但它是我想解決的問題。我看過很多其他的內存異常問題,儘管沒有人幫助過我。我做了一次內存分析測試,沒有顯示出任何不尋常的東西。

我認爲imageViews和imageButtons使用的內存太多,儘管我只有一次打開一個活動。

+0

嵌套佈局可能會導致。那裏有多少層? – wisemann

回答

1

你已經提到它總是落在ImageView和ImageButton上 - 這是解決這個問題的線索。你會得到OOM,因爲這個視圖的背景資源具有很高的分辨率,並佔用大量的內存。嘗試降低此圖像的分辨率。

此外,你已經提到你有一個滾動視圖,這意味着你保存在內存中的每30個項目。可能你最好把它改成由適配器支持的RecyclerView。

+0

因此,將圖像更改爲較低的分辨率工作....排序。除非我真的試圖導致它崩潰幾乎不存在。大多數用戶不會將它推到極限。雖然,我希望它完全消失。使用scrollView是因爲我想讓我的應用可以通過android 3.0或更高版本訪問。使用recyclerView將移動到android 5.0。他們的方式可以減少scrollView的內存需求,而無需使用recyclerView? – RhysBailey21

+0

RecyclerView是支持庫的一部分,可從SDK 7及更高版本的API訪問,這意味着您在使用RecyclerView時具有向後兼容性。自SDK v1以來,還有一些適配器支持的視圖,如ListView,GridView等。所以這不是喜歡ScrollView比RecyclerView –

2

這是因爲您的圖像正在加載。當您加載圖像並且在頁面上移動並查看其他圖像時,堆會增加。隨着您繼續查看隨機圖像的過程,堆增長得更快,直到您的應用崩潰。這就像在玻璃桌子上堆書。您可以移動(緩存)書籍(圖片)或玻璃(應用程序)中斷。您應該使用圖像加載器來加載圖像。

https://github.com/nostra13/Android-Universal-Image-Loader

+0

我明白你的意思。非常好的描述。雖然,「刷新」每一項活動的變化不是更好嗎? – RhysBailey21

+0

不,因爲您在做這項工作而不是圖片加載程序。少工作是好事。我已經看到0與圖像加載器內存不足的錯誤。我喜歡轉向其他更具活力的方面,也許你喜歡這項工作。 :) – SmulianJulian

0

剛剛有同樣的問題,我想簡化所有的事情在這裏說:

簡單:減少您的圖片大小。

不要使用1080X1920圖片...它的分辨率太高。

這樣的圖像,即使壓縮,部署時將捕獲大約1080X1920X4B = 8.2MB(GPU必須將其部署到它的全部原始分辨率......這就是爲什麼壓縮無助於減少所需內存大小.. 。)和這個我我們正在談論的內存..

把瘸子或Photoshop和向下縮放圖像,比如說,1/4:540X960,你不會覺得區別..相信我,已經在那裏了。

請注意圖像和視頻的內存消耗。

希望這有助於

詹姆斯