2017-01-10 29 views
0

我前一天更新的應用程序在滾動過程中,並在第一時間,我收到用戶發佈的一些崩潰,類似以下:java.lang.OutOfMemoryError的ListView的Android

java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:299) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
    at java.lang.Thread.run(Thread.java:856) 
Caused by: java.lang.OutOfMemoryError 
    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper.loadBitmapFromStream(UrlImageViewHelper.java:109) 
    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper.access$100(UrlImageViewHelper.java:27) 
    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$1.onDownloadComplete(UrlImageViewHelper.java:582) 
    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.doInBackground(UrlImageViewHelper.java:648) 
    at com.koushikdutta.urlimageviewhelper.UrlImageViewHelper$3.doInBackground(UrlImageViewHelper.java:645) 
    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
    ... 3 more 

我明白這與圖像的處理有關。 (該應用程序從服務器檢索很多文章,顯示爲圖像和標題)。

我做的一個快速解決方案是在最大600像素寬度時減小圖像的大小(圖像大小可變)。

爲此,我使用了com.koushikdutta.urlimageviewhelper庫,版本1.0.4。我不知道,有沒有其他庫能夠處理大量的圖像,以及如何使用它。我在ListView如何使用

一種方法是象下面這樣:

public class NewsAdapter extends BaseAdapter { 

    private ArrayList<NewsItem> data; 

    private Context context; 
    private LayoutInflater layoutInflater; 

    public NewsAdapter(Context context, ArrayList<NewsItem> data) { 
     this.data = data; 
     layoutInflater = LayoutInflater.from(context); 
     this.context = context; 
    } 

    public int getCount() { 
     return data.size(); 
    } 

    public Object getItem(int position) { 
     return data.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    @SuppressLint({ "DefaultLocale", "InflateParams" }) 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.news_row, null); 
      holder = new ViewHolder(); 

      holder.image = (ImageView) convertView 
        .findViewById(R.id.image); 

      holder.name = (TextView) convertView 
        .findViewById(R.id.time); 

      holder.job = (TextView) convertView 
        .findViewById(R.id.title); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     //change the font 
     Typeface typeFace=Typeface.createFromAsset(context.getAssets(),"fonts/Lato-Regular.ttf"); 

     holder.name.setTypeface(typeFace); 
     holder.job.setTypeface(typeFace); 

     UrlImageViewHelper.setUrlDrawable(holder.image, 
       data.get(position).getImage_url()); 

     holder.name.setText(data.get(position).getDate()); 
     holder.job.setText(data.get(position).getTitle()); 

     return convertView; 
    } 

    static class ViewHolder { 
     ImageView image; 
     TextView name, job; 
    } 
} 
+1

的可能的複製[怪掉的內存問題,同時加載圖像的Bitmap對象(http://stackoverflow.com/questions/477572 /奇怪的內存不足問題,而加載一個圖像到一個位圖對象) –

+1

你可以用它的fit()函數試試picasso你的oom錯誤不會出現在這裏是引用鏈接 https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact = 8&VED = 0ahUKEwiZ9LXqmrfRAhVEuY8KHfKIDqsQFggZMAA&URL = HTTP%3A%2F%2Fsquare.github.io%2Fpicasso%2F&USG = AFQjCNHtRDFJvt8HPDMbENo3RvpkdPZYsA&SIG2 = GxuKK26D5b7zeIP3m0ewbA與BVM = bv.143423383,d.c2I – pkgrover

+0

代碼plaese – Sebastian

回答

1

我認爲你有問題要流解碼成位圖,如果有大量的數據流轉換爲位圖,再有就是大概率扔出去的記憶。

如果您有使用庫。嘗試更多

Nostra

Glide

Picasso

+0

我嘗試過畢加索,但它仍然給我OutOfMemory問題。 – Xhulio

+1

@Xhulio,你也可以嘗試其餘的兩個。如果仍存在問題,那麼您應該減少服務器中的圖像大小。我認爲你應該減少這個問題的規模。 –

相關問題