2012-07-15 52 views
0

在低內存設備中使用位圖處理非常長的列表視圖的最佳方式是什麼?我滾動了一下之後發生崩潰......我不想失去圖像質量......我只想加載可用內存中可能的項目數量,但這顯然是一個不好的解決方案。我是否必須根據位置手動回收位圖,在getView()中?這是處理這個問題的方法嗎?使用位圖的列表視圖中的內存問題

我的目標是API 7.

在此先感謝。

P.S.位圖使用HTTP從遠程服務器加載。

+0

萬一你沒有看過它,[這篇文章在Android開發者網站(http://developer.android.com/training/displaying-bitmaps/ index.html)涵蓋了很多與此問題相關的一般問題。它可能不夠具體,以幫助你(因爲你提到你有一個低存儲設備作爲目標)。 – Joe 2012-07-15 12:58:23

+0

我已經讀過,但至少目前它並沒有給我一個關於如何解決這個問題的具體想法。 – Ixx 2012-07-15 13:02:43

回答

0

直接從SD Card加載Bitmap。請勿將其保存在memory的某種bitmap cache中。

+0

對不起,我忘了提及使用http請求從服務器加載位圖。 – Ixx 2012-07-15 10:26:09

+0

將其存儲在SD卡中。因此相對於將其加載到其存儲在SD卡中的位置 – Blackbelt 2012-07-15 10:46:32

+0

並不能解決問題,我仍然有同樣的問題。滾動一段時間後,它們將被加載到RAM中。所以這個問題我怎麼卸載/管理他們仍然是一樣的。 – Ixx 2012-07-15 10:51:56

0

您是否在getView()方法中回收您的意見? 如果不是,那接下來的事情:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    if(mInflater == null){ 
    mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    View viewItem = convertView; 
    if(viewItem == null) 
     viewItem = mInflater.inflate("YOUR_LAYOUT", null); 


//Continue with your code but use viewItem as the view of the list view line, that way you don't always create new instance of it. This is what helped me in the same problem. 

編輯:查了下帖子,可能是它可以幫助你。

How do I do a lazy load of images in ListView

Multithreading For Performance

+0

這對位圖數據的內存消耗沒有幫助......它將回收持有者,但新的位圖將始終加載到內存中。 – Ixx 2012-07-15 10:49:35

+0

@Ixx你說得對,但這也是一個問題。可能會先下載所有圖像,將它們存儲爲您的SD卡,然後使用它們? – 2012-07-15 10:51:40

+0

如果我從SD卡的遠程服務器獲取它們(關於內存,至少這個問題不是速度問題),這並不重要......重點是當我滾動時它們將被加載到內存中,然後我用完了內存。 – Ixx 2012-07-15 10:53:43