2015-04-20 117 views
1

我的應用程序的一個主要問題是崩潰,這是由於我的應用程序包含大量內容(它是內容共享網站客戶端)而發生的。我有很多內存錯誤,我可以使用高達170-180 MB的內存,這很荒謬。需要幫助管理內存

http://i.gyazo.com/6cd53e6cf6f0a9bfdd6a24b323a70b09.gifhttp://gyazo.com/b64d50f76b2ef608954a6d6cdd5d52d0

這些截圖是剛剛從裝載25份意見書,並通過他們的滾動。

我目前的設置是像這樣:LruCache與

(Runtime.getRuntime().maxMemory()/1024)/8

負責處理所有提交的圖像尺寸。當我加載提交照片或縮略圖時,它會進入該緩存。相冊由位圖的簡單ArrayAdapter和WeakHashMap存儲處理,因爲它很少被調用(可能每25-30個帖子中有1個包含相冊)。通過GfyCat將GIF流式傳輸到VideoView,GIF或專輯中不會發生真正的崩潰。當我滾動時會出現真正的錯誤,這很奇怪,因爲我一次將圖像加載到LruCache中以節省移動無線電時間(電池改進)。

這個問題似乎是,Android是試圖可能把更多的進入LruCache比是可以的,因爲我得到這樣

java.lang.OutOfMemoryError: Failed to allocate a 3169972 byte allocation with 1400991 free bytes and 1368KB until OOM

即使我LruCache大小爲24576kb錯誤。

我是否正確處理內存?我可以採取哪些步驟來提高穩定性,並保持應用程序的速度? 謝謝!

+0

你縮放點陣圖,當你加載它們? – dumazy

回答

0

我最終從離子圖像加載庫切換到畢加索,並通過自動緩存節省了33%的RAM使用量,所以我擺脫了LruCache和我所有的商店,現在它的工作比以往更好!

1

您還可以進一步通過使用增強畢加索這種配置

Picasso.with(this) 
      .load(YOUR_URL) 
      .config(Bitmap.Config.RGB_565).fit() 
      .into((ImageView) findViewById(
        R.id.frame_main_main_layout)); 

就會減少分配內存,使性能更好

+0

這到底是做什麼的?看起來很有趣! – ccrama

+0

fit()使畢加索只使用適合你的大小ImageView,而不是分配讓大的圖像,如果你要使用它作爲thumbnal例如,那麼你會減少分配到大圖像。 –

+0

config(Bitmap.Config.RGB_565)將位圖的配置更改爲16位而不是32位,它會增強您的內存並減少分配。試一試。 –