2012-02-21 64 views
0

我爲Android手機構建了一個簡單的應用程序(TCHS JROTC),在Android開發中我非常體面。我在Galaxy S2 Epic 4g上構建了這款應用程序,並且處理得非常完美。除了諸如Evo 4g和Nexus S之類的其他手機之外,它強制關閉一個具有大約8個圖片圖標的特定屏幕。我調試它,並拋出一個錯誤,說「不夠內存」,這正是我認爲這是因爲我的代碼是非常完美無缺,完美的作品。有沒有人有任何想法如何讓應用程序可能會增量加載,而不是一次性將圖標圖像全部轉存到Activity中?謝謝!Android應用程序使用太多內存。我如何使它在更少的RAM上運行?

+4

對不起,但你的代碼並不完美,如果它不能正確處理內存不足的錯誤 – LordT 2012-02-21 14:41:04

+1

你是否爲不同的DPI提供了圖標 - 例如,你是否爲'drawable-xhdpi' /'drawable-hdpi'/'drawable-mdpi'和'drawable-ldpi' - 或者你只是將所有內容都轉換爲'drawable'? – Jens 2012-02-21 14:46:07

+1

在內存不足錯誤時查看日誌輸出會非常有幫助,並且還會更深入地描述您在該屏幕上執行的操作。我會驗證您使用的圖片尺寸是否適合您的用戶界面,使用比所需圖片大的圖片會導致內存不足,因爲它們必須全尺寸加載到內存中,然後調整大小。除此之外,我猜你實際上有內存泄漏,並建議你使用MAT查找Google IO視頻。 – cistearns 2012-02-22 08:58:01

回答

0

你可以做些什麼來減少應用程序的內存消耗是在圖標中使用另一種像素編碼。

你可以在RGB888,ARGB8888,ARGB4444,RGB565和更多我認爲的像素進行編碼。如果以資產形式存儲Bitmaps,您可以如何加載。這個例子來自「開始Android遊戲」一書。即使您對編寫Android遊戲不感興趣,也是絕對可推薦的。

InputStream inputStream = assetManager.open("bob.png"); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_4444; 
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); 

在這個例子中使用了ARGB4444編碼。比如使用比ARGB8888更少的內存。

我只是一個初學者在android編程。但是,如果將圖像存儲在外部存儲器/ SD卡上,而不是直接將它們放入項目中,我認爲它可能會減少應用程序的內存佔用量。這樣他們將成爲生成的.apk文件的一部分。這將有一些額外的字節。 :-)請糾正我,如果我錯了這一點。我只是在學習。

+2

您的最後一點是不正確的,將文件存儲在不同的文件系統位置將無助於解決內存(堆)問題。 – cistearns 2012-02-22 08:48:57

+0

那麼我使用drawables,這是一個非常愚蠢的錯誤。當他們需要縮小的時候,我保存了巨大的圖片,所以當我將它們重新縮放到合適的尺寸時,我的應用程序從2MB變爲567或KB。它修復了所有強制關閉問題,這是我的問題。感謝您的幫助! – user1064249 2012-02-25 00:38:53

相關問題