嗨我的代码非常简单,我的图像都被压缩,所以没有人超过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);
}
}
答案 0 :(得分:1)
Universal Image Loader是nostra13的库,它非常记录和广泛使用,并以配置设置< / 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。
或者只是使用图像加载库来延迟加载图像