今年做公司項目的時候,自己做與File有關的那部分。
需求如下:
如果是圖片就完全顯示出來,如果不是圖片就讓顯示默認的圖標。還有兩種不同的顯示方式,一種是tile view(瓦片樣式,就是一行可以有好幾個文件,類似GridView,但是有的Item可以跨行),另一種就是list View.
眾所周知,每一個Android APP 分配16M的內存,圖片的內存被分配給8M,這些內存真是少的有點可憐,內存的及時回收顯得極為重要,內存的重復利用同樣如此。
我自己寫了一個ImageDownloader類來異步下載圖片,並且把圖片和URL對應保存到內存中,當出現相同的url時,不用再次從網絡下載,直接從內存裡面取,節省了時間,也節省了網絡資源。
剛開始的時候只要屏幕上有幾張圖片,不同視圖(tile view 和 list view)之際切換就會有出現如下error:“ bitmap size exceeds vm budget”,相信大多數人都遇到過這樣的問題。
一直不知道怎麼解決?
後來才發現了問題所在:我的兩個Adapter(TileViewAdapter 和ListViewAdapter)中各自保存了一個ImageDownloader,這樣就會使用的內存加倍,所有我的解決方法就是把ImageDownloader變量位置向上提一級,放到他們共同的Activity中,問題就解決了。
如果發現任何問題,請您指正。