如何使用 Fragment 回收 pageAdapter 中的位图?在 android
How to recycle a bitmap in pageAdapter with Fragment? in android
这是 ViewPager 和 PageAdapter 中使用的 PageF
片段的来源。
public class PageF extends Fragment {
public static final String ARG_PARAM1 = "bitmap";
public static PageF newInstance(int id) {
PageF fragment = new PageF();
Bundle args = new Bundle();
args.putInt(ARG_PARAM1, id);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.preview_image, container, false);
}
@Override
public void onViewCreated(View view, @Nullable final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = (ImageView) view;
Bitmap bitmap = BitmapFactory.decodeResource(
getResources()
, getArguments().getInt(ARG_PARAM1)
);
imageView.setImageBitmap(bitmap);
}
}
如何回收该位图?有时,在某些设备中,它会发生内存不足。 :(
您应该避免自己创建位图。
看看这个 JavaDoc :
ImageView#setImageResource(int resId);
它不会阻止所有内存不足 (OOM) 错误
这是 ViewPager 和 PageAdapter 中使用的 PageF
片段的来源。
public class PageF extends Fragment {
public static final String ARG_PARAM1 = "bitmap";
public static PageF newInstance(int id) {
PageF fragment = new PageF();
Bundle args = new Bundle();
args.putInt(ARG_PARAM1, id);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.preview_image, container, false);
}
@Override
public void onViewCreated(View view, @Nullable final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = (ImageView) view;
Bitmap bitmap = BitmapFactory.decodeResource(
getResources()
, getArguments().getInt(ARG_PARAM1)
);
imageView.setImageBitmap(bitmap);
}
}
如何回收该位图?有时,在某些设备中,它会发生内存不足。 :(
您应该避免自己创建位图。
看看这个 JavaDoc :
ImageView#setImageResource(int resId);
它不会阻止所有内存不足 (OOM) 错误