在第二次创建位图后,我收到以下错误:
04-17 18:28:09.310: ERROR/AndroidRuntime(3458): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
this._profileBitmap = Bitmap.createBitmap(_profileBitmap, xCoor, yCoor, width, height);
Run Code Online (Sandbox Code Playgroud)
从日志:
04-17 18:27:57.500: INFO/CameraCropView(3458): Original Photo Size: W 1536 x H 2048
04-17 18:28:06.170: INFO/CameraCropView(3458): xCoor: 291
04-17 18:28:06.170: INFO/CameraCropView(3458): yCoor: 430
04-17 18:28:06.170: INFO/CameraCropView(3458): Width: 952
04-17 18:28:06.170: INFO/CameraCropView(3458): Height: 952
Run Code Online (Sandbox Code Playgroud)
由于图像很大,我得到了错误.但有趣的是错误不是第一次发生,只有当我第二次拍摄时才会发生,这让我相信这个profileBitmap不会被破坏.我该如何清理它?
我正在使用位图.当代码运行时,它显示内存不足错误.如何避免错误.我的代码如下.提前致谢.
Bitmap myBitmap = Image.decodeSampledBitmapFromUri(path, 250, 500);
img_cook[index].setImageBitmap(myBitmap);
public static Bitmap decodeSampledBitmapFromUr(String path, int reqWidth,
int reqHeight) {
Bitmap bm = null;
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(path, options);
return bm;
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) …Run Code Online (Sandbox Code Playgroud) 我试图围绕图片文件解码,但它无法捕获内存不足异常,并且应用程序崩溃.
我知道解码图片文件的一些技巧,比如子采样.但是我需要放大图片来查看细节,所以我不能对它进行过多的子采样.对于某些较新的设备,它可以成功分配更大的内存以避免内存不足异常.
对于一些较旧的设备,它不能.
如果我可以为不同的设备自定义我的应用程序,那将会很大.
所以我想:(1)我希望我可以解决内存不足异常,所以如果我抓住它,我可以减少图像大小.(2)或者,我希望我可以获得可用内存的大小进行分配.
我在网上搜索,找不到答案.
我已经构建了一个显示天气数据的Android应用程序(如果你想测试问题,我可以私下给你一个应用程序名称).用户可以从一天浏览到另一天以查看特定日期的天气.
我的应用程序使用片段(单个MainActivity和导航抽屉调用特定片段).
DayPagerFragment使用ViewPager具有无限数量的页面(动态片段).页面代表一天.
DayPagerFragment
public class DayPagerFragment extends Fragment {
private ViewPager mViewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_day, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(1);
mViewPager.setAdapter(new DayAdapter(getChildFragmentManager()));
}
private static class DayAdapter extends FragmentStatePagerAdapter {
public DayAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return DayFragment.newInstance(null);
}
@Override
public int getCount() {
// I don't …Run Code Online (Sandbox Code Playgroud) android memory-leaks android-imageview android-fragments android-viewpager