2015-04-07 44 views
1

您好我的Android應用程序在我的聯想a319設備上工作正常,在此設備中,它同時在Galaxy s5設備上消耗40 MB的RAM,它爲相同的構建(apk)消耗300 Mb。而且我在Galaxy s5設備上遇到很多錯誤,例如內存問題。我的Android應用程序的內存問題

對於實例

出異常的內存

android.view.InflateException:二進制XML文件中的行

錯誤。我發現這Question答案是高像素分辨率會導致內存異常,我無法從該問題提供的答案中得到任何線索,請提供相同的支持?

編輯: 謝謝你的答案,但他們inacurate我再利用回收的位圖和我讓他們空,甚至調用System.gc();而我的記憶是不變的,我只是不明白,爲什麼sumasung galxy s5需要300 MB的RAM,而我的聯想只有40 MB。如果我確定,我的聯想是hdpi s5是xxhdpi。

回答

1

這個東西可以是一個簡單的辦法解決這個

剛加入這一行你的應用程序標籤清單文件

android:largeHeap="true"

這樣

<application android:largeHeap="true" android:allowBackup="true" ......

如果你想更多的優化你的代碼,然後使用內存分析儀在日食

+0

更好地解決您的泄漏?像回收位圖和東西,largeHeap =真並不總是幫助 –

+0

編輯問題 – Csabi

+0

是的,我知道它更好地修復泄漏,但有時可能會有大圖像這就是爲什麼largeheap是更好的解決方案,我認爲先生 – cnnagpal

2

看起來您的應用程序是使用xml文件中定義的佈局構建的。這些佈局使用背景圖像或源圖像的圖像,例如ImageButtonImageView等。您的所有繪圖通常存儲在drawable-DENSITY文件夾中。所以你需要降低所有繪圖的分辨率來節省一些內存。就像如果你有一些可繪製的ImageView,我們可以稱其爲new_image.jpg及其drawable-hdpi,其分辨率爲800x600像素,嘗試將其大小調整爲400x300像素(您可以使用Farstone圖像查看器進行此操作)。用項目中的每個drawable來做這件事,看看會發生什麼。
此外,它可能是你正在使用一些ImageLoader像Glide(推薦)或UIL或Picasso或任何使用的用途在ListViews中顯示圖像。這樣的加載程序通常會消耗大量的RAM(可以對其進行配置)以滿足緩存需求,並且由於在某一時刻AOS無法加載,構建和表示一些自己使用圖像的佈局。
另外我建議你to lern how to display Bitmaps efficiently必須知道這樣的事情。

+0

編輯問題 – Csabi

0

除了位圖和繪圖之外,最常見的問題是通過Activity上下文泄漏內存。確保你沒有將活動傳遞給回調監聽器。 分析內存的好工具是MAT(內存分析工具)。它可以幫助你找出內存泄漏在你的應用程序

+0

編輯問題 – Csabi