图像占用太多记忆

时间:2017-02-11 13:19:28

标签: android image memory

嗨我的代码非常简单,我的图像都被压缩,所以没有人超过50kb。当我启动我的应用程序1加载图像并且内存使用量约为42mb但是当我向下滚动到另一个图像时,每隔一个图像会导致内存使用量增加到250mb。怎么解决?这是我的代码,请我是初学者,所以尽量解释一下。

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;


public class CustomSwip extends PagerAdapter {
private int[] imageResources = {R.drawable.j1, R.drawable.jg2,R.drawable.jg3, R.drawable.jg4, R.drawable.jg5, R.drawable.jg6, R.drawable.jg7, R.drawable.jg8, R.drawable.jg9, R.drawable.jg10, R.drawable.jg11, R.drawable.jg12, R.drawable.jg13, R.drawable.jg14, R.drawable.jg15, R.drawable.jg16};
private Context ctx;
private LayoutInflater layoutInflater;

public CustomSwip(Context c) {
    ctx = c;
}

@Override
public int getCount() {

    return imageResources.length;
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = layoutInflater.inflate(R.layout.activity_custom_swip, container, false);
    ImageView imageView = (ImageView) itemView.findViewById(R.id.swip_image_view);
    imageView.setImageResource(imageResources[position]);
    container.addView(itemView);
    return itemView;
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {

}


@Override
public boolean isViewFromObject(View view, Object object) {

    return (view == object);
}

}

2 个答案:

答案 0 :(得分:1)

Universal Image Loadernostra13的库,它非常记录广泛使用,并以配置设置< / strong>它提供加载图像。在其中,有一个选项可以加载 RGB_565 中的图像,这可以减少大约一半的内存消耗(实际上已经看到了结果)等等。

  

在显示选项中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位图消耗的内存比ARGB_8888少2倍。

一次查看WeakReferences。它可以帮助调用垃圾收集器以获取内存密集型图像。

答案 1 :(得分:0)

根据setImageResource的文档,

  

这会在UI线程上进行Bitmap读取和解码,这会导致延迟打嗝。如果这是一个问题,请考虑使用setImageDrawable(android.graphics.drawable.Drawable)或setImageBitmap(android.graphics.Bitmap)和BitmapFactory。

或者只是使用图像加载库来延迟加载图像