首页 > 解决方案 > ViewPager 在 setImageResource 中返回 OOM

问题描述

在 viewpager onPageselected 中设置 drawable 会导致 OOM。

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(final int position) {
                final View[] images = new View[]{image1, image2, image3, image4, image5};
                final int[] imageIds = new int[] {R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5};
                if(position < images.length && images[position].getBackground() == null) {
                    ((ImageView)images[position]).setImageResource(imageIds[position]); //crashes with OOM for most devices, some devices it works
                }
}

崩溃日志:

1   dalvik.system.VMRuntime.newNonMovableArray  Native Method
2   android.graphics.BitmapFactory.nativeDecodeAsset    Native Method
3   android.graphics.BitmapFactory.decodeStream BitmapFactory.java, line 856
4   android.graphics.BitmapFactory.decodeResourceStream BitmapFactory.java, line 675
5   android.graphics.drawable.Drawable.createFromResourceStream Drawable.java, line 2230

标签: androidandroid-viewpager

解决方案


推荐阅读