android - 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
解决方案
推荐阅读
- php - 使用一个没有类别的元素对项目类别进行明智的排序
- javascript - 如何将表单与一个输入链接提交与两个链接
- html - 带箭头的垂直线
- android - Android (Chrome) 上带有初始屏幕的 PWA 无法在应用名称中显示特殊字符
- java - StorageService 在 GluonHQ 框架上出现错误 - 我该如何解决?
- wpf - WPF DockPanel MinHeight 用法
- javascript - JavaScript:连续调用多个异步函数的更好方法?
- firebase - Decoding managed protocol buffer datastore/firestore export by google with protoc
- reactjs - 如何在 React Redux 中全局设置 `forwardRef: true`?
- javascript - 为什么axios拦截器中不能设置cookies