2016-05-03 12 views
1

私はユニバーサル画像ローダー1.9.5を使用してURLから画像を読み込みます。
がこのユニバーサル画像ローダの設定アンドロイドユニバーサル画像ローダーがメモリ不足エラー

public class ActImg extends AppCompatActivity { 

static final String KEY_IMG = "img"; 
List<HashMap<String,String>> imgHashmap; 

List<ClassImg> imgList = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_act_img); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .imageScaleType(ImageScaleType.EXACTLY) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .resetViewBeforeLoading(true) 
      .displayer(new FadeInBitmapDisplayer(300)) 
      .showImageOnLoading(R.drawable.img_loading) 
      .build(); 

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) 
      .defaultDisplayImageOptions(defaultOptions) 
      .threadPoolSize(3) 
      .memoryCache(new WeakMemoryCache()) 
      .diskCacheSize(100 * 1024 * 1024) 
    .build(); 

    Intent i = getIntent(); 

    CustomListView lvi = (CustomListView)findViewById(R.id.listViewImg); 

    try { 
     XmlPullParserImg parser = new XmlPullParserImg(); 
     imgList = parser.parse(getAssets().open(file)); 
     BinderDataImg binderdata = new BinderDataImg(this, imgHashmap); 
     lvi.setAdapter(binderdata); 

    }catch(IOException e) { 
     e.printStackTrace(); 
    } 

} 

アップデートで活性であるアダプタ

public class BinderDataImg extends BaseAdapter { 

static final String KEY_IMG = "img"; 
LayoutInflater inflater; 
List<HashMap<String,String>> imgHashmap; 
ViewHolder holder; 

ImageLoader imageLoader = ImageLoader.getInstance(); 

public BinderDataImg(Activity act, List<HashMap<String,String>> map) { 
    this.imgHashmap = map; 
    inflater = (LayoutInflater) act 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public int getCount() { 
    // TODO Auto-generated method stub 
    return imgHashmap.size(); 
} 

public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.list_img, null); 
     holder = new ViewHolder(); 
     holder.iv_img =(ImageView)vi.findViewById(R.id.imageViewImg); 

     vi.setTag(holder); 
    } 
    else{ 

     holder = (ViewHolder)vi.getTag(); 
    } 

    String uri = imgHashmap .get(position).get(KEY_IMG); 

    imageLoader.displayImage(uri, holder.iv_img); 

    return vi; 
} 

static class ViewHolder{ 
    ImageView iv_img; 
} 

}

ある:50:これはlogcat
05から03 03 38.011 18383- 18878/tttdigital.readmangaonline E/ImageLoader:null
java.lang.OutOfMemoryError
android.graphics.Bitmap.nativeCre (android.graphics.Bitmap.createBitmapに(ネイティブメソッド)
android.graphics.Bitmap.createBitmapで (Bitmap.java:689)
android.graphics.Bitmap.createBitmapで (Bitmap.java:666)
を食べcom.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.javaでBitmap.java:599)
com.nostra13.universalimageloader.core.decode.BaseImageDecoder.considerExactScaleAndOrientatitonで (BaseImageDecoder.java:218)
: 91)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:265)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTas java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)でk.tryLoadBitmap(LoadAndDisplayImageTask.java:238)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.runで (LoadAndDisplayImageTask.java:136)
私はURLから画像を読み込むことができjava.lang.Thread.runでjava.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573)
(Thread.java:856)


、一部のイメージは表示できず、OutOfMemoryエラーが発生します。
どのように修正するのですか?

+0

logcatを追加してください。 – USKMobility

+0

http://stackoverflow.com/questions/17211154/universal-image-loader-uil-n ostra-out-of-memory-error – USKMobility

+0

@USKMobility:投稿記事 – abcd1234

答えて

0

あなたがこれを行うことができますいくつかの方法、

1)たとえば、以下のあなたのメモリキャッシュのサイズを増やすには15

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPoolSize(3) 
      .threadPriority(Thread.MIN_PRIORITY + 3) 
      .denyCacheImageMultipleSizesInMemory() 
      .memoryCacheSize(1048576 * 15)    
      .discCache(new UnlimitedDiscCache(cacheDir)) 
      .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) 
      .build(); 

2)スレッドプールを減らすために、それを設定し、そこにありますサイズは以下の3を使用しました

ImageLoaderConfiguration.Builder(context).threadPoolSize(3) 
これは代わりに ARGB_8888 使用 RGB_565

.bitmapConfig(Bitmap.Config.RGB_565) 

のグライドに働くよう10

3)また、あなたが扱っている場合、一般的にはマニフェストファイルlargeHeap=trueを使用することができます。また、この設定を試してみてくださいアプリに大量の画像を読み込む

+0

でlargeHeap = trueを更新しましたが、これはどのくらいのAPIを使用していますか?または任意のAPIがそれを使用できますか? – abcd1234

+0

いいえ、すべてのバージョンのアンドロイドをサポートするための最小バージョンはありません –

+0

これはデバイスのメモリには問題ありませんか? – abcd1234