2012-11-26 35 views
0

我有一個應用程序,通過加載所有的幀作爲單獨的位圖加載到內存,並通過他們分配給imageViews他們的線程循環動畫GIF的。Android應用內存限制

imageViews位於片段上,片段位於pageViewer上。我已將頁面瀏覽器的屏幕外限制設置爲1,所以我一次最多處理三個片段/ gif。

現在與2.1模擬器我得到這個錯誤,如果所有三個圖檔是在內存中在同一時間:

11-25 17:28:34.269: E/dalvikvm-heap(524): 292000-byte external allocation too large for this process. 
11-25 17:28:34.269: E/(524): VM won't let us allocate 292000 bytes 

我得到2.3.3,但是不能在4.0.3仿真器或同樣的錯誤我的星系標籤10.1運行4.0.4 - 這兩個運行良好,相當快。

我試過加載1024x999 3.2MB gif,甚至4.0.3模擬器都失敗了,但我的平板電腦仍然設法顯示一些gif,直到它也停止加載它們;該應用使用了大約250-300MB的RAM。

那麼有沒有一種方法可以預測真實設備的工作方式?我應該瞄準更高版本的API嗎?

+0

GIF是從網上加載的,還是由您提供?如果他們是資源,則應該使用動畫代替。這是最近問:http://stackoverflow.com/questions/12977039/android-loading-images-with-a-delay/12978091#12978091 – dmon

+0

另請注意,每個應用程序的限制遠小於設備的內存。 – dmon

+0

「該應用程序使用了大約250-300MB的RAM。」這太過分了。 http://stackoverflow.com/questions/2630158/detect-application-heap-size-in-android有些設備的總共沒有250MB – zapl

回答

1

加載如此多的位圖時,您必須非常小心。您可以輕鬆地超過您需要的內存量。 還記得,你是在一個有限的設備上,不要期望無限的資源儘可能地提高內存的效率。

如果你學會從Android開發網站最佳實踐,您可以很容易解決您的問題:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

不妨一讀,應該可以幫助您解決問題。

+0

肯定有一些方法可以遏制內存使用,我打算這樣做,但是我擔心的是缺乏一致性。我花了一段時間試圖摧毀GIF的用戶去下一個片段,因爲我認爲我已經超過了應用程序內存限制,然後我嘗試了它在我的真實設備上,看到它不是必需的,應用程序的限制是某種程度上不觸發。 – Arnas