Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android通用图像加载程序内存不足错误_Android_Universal Image Loader - Fatal编程技术网

android通用图像加载程序内存不足错误

android通用图像加载程序内存不足错误,android,universal-image-loader,Android,Universal Image Loader,我使用Universal image loader 1.9.5从url加载图像。 这是适配器 public class BinderDataImg extends BaseAdapter { static final String KEY_IMG = "img"; LayoutInflater inflater; List<HashMap<String,String>> imgHashmap; ViewHolder holder; ImageLoader imageL

我使用Universal image loader 1.9.5从url加载图像。
这是适配器

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;
}
公共类BinderDataImg扩展了BaseAdapter{
静态最终字符串键\u IMG=“IMG”;
充气机;
列出imgHashmap;
视窗座;
ImageLoader ImageLoader=ImageLoader.getInstance();
公共BinderDataImg(活动法案,列表地图){
this.imgHashmap=map;
充气机=(充气机)法
.getSystemService(上下文布局\充气机\服务);
}
public int getCount(){
//TODO自动生成的方法存根
返回imgHashmap.size();
}
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null){
vi=充气机充气(R.layout.list\u img,空);
holder=新的ViewHolder();
holder.iv_img=(ImageView)vi.findViewById(R.id.imageViewImg);
vi.setTag(支架);
}
否则{
holder=(ViewHolder)vi.getTag();
}
字符串uri=imgHashmap.get(位置).get(键\u IMG);
imageLoader.displayImage(uri,holder.iv_img);
返回vi;
}
静态类视窗夹{
ImageView iv_img;
}
}

这是配置通用映像加载程序的活动

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();
    }

}
公共类活动扩展了AppCompatActivity{
静态最终字符串键\u IMG=“IMG”;
列出imgHashmap;
列表imgList=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u act\u img);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
DisplayImageOptions defaultOptions=新建DisplayImageOptions.Builder()
.cacheInMemory(真)
.cacheOnDisk(真)
.imageScaleType(imageScaleType.Justice)
.bitmapConfig(Bitmap.Config.RGB_565)
.ResetViewBefore加载(真)
.显示器(新FadeInBitmapDisplayer(300))
.showImageOnLoading(R.drawable.img_加载)
.build();
ImageLoaderConfiguration配置=新建ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(默认选项)
.线程池大小(3)
.memoryCache(新的WeakMemoryCache())
.diskCacheSize(100*1024*1024)
.build();
Intent i=getIntent();
CustomListView lvi=(CustomListView)findViewById(R.id.listViewImg);
试一试{
XmlPullParserImg parser=新的XmlPullParserImg();
imgList=parser.parse(getAssets().open(file));
BinderDataImg binderdata=新的BinderDataImg(此,imgHashmap);
lvi.setAdapter(binderdata);
}捕获(IOE异常){
e、 printStackTrace();
}
}
更新:这是logcat
05-03 03:50:38.011 18383-18878/tttdigital.readmangaonline E/ImageLoader:null
java.lang.OutOfMemoryError
位于android.graphics.Bitmap.nativeCreate(本机方法)
在android.graphics.Bitmap.createBitmap(Bitmap.java:689)
在android.graphics.Bitmap.createBitmap(Bitmap.java:666)
在android.graphics.Bitmap.createBitmap(Bitmap.java:599)
在com.nostra13.universalimageloader.core.decode.BaseImageDecoder.considerexactscaleandorientTiton(BaseImageDecoder.java:218)上
com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:91)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:265)
在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:238)
在com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:136)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
在java.lang.Thread.run(Thread.java:856)

我可以从url加载图像,但有些图像无法显示,我从内存错误中退出。

如何修复它?

有几种方法可以做到这一点

1) 将内存缓存大小增加到下面的示例中,将其设置为15

2) 减少线程池大小我在下面使用了3个

3) 也可以尝试此设置,因为它在glide中工作,而不是在ARGB_8888中工作 使用
RGB_565


通常,如果您要在应用程序中加载大量图像,可以在清单文件中使用
largeHeap=true

1) 将内存缓存大小增加到下面的示例中,将其设置为15

2) 减少线程池大小我在下面使用了3个

3) 也可以尝试此设置,因为它在glide中工作,而不是在ARGB_8888中工作 使用
RGB_565


通常,如果要在应用程序中加载大量图像,可以在清单文件中使用
largeHeap=true

@USKMobility:I在post@USKMobility:我在我的帖子中更新了largeHeap=true,它用于多少API?或者任何API都可以使用它?不,没有最小版本n因为它支持所有版本的androidit,设备内存正常吗?你也可以使用largeHeap=true,它用于多少API?或者任何API都可以使用它?不,没有最小版本,因为它支持所有版本的androidit,设备内存正常吗?你也可以通过
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();
ImageLoaderConfiguration.Builder(context).threadPoolSize(3)
.bitmapConfig(Bitmap.Config.RGB_565)