内存问题
因此,我正在编写一个应用程序,该应用程序应该能够分页浏览顶部有一个 640 x 480 大图像和 3 个属于延迟加载的画廊的图像的详细视图。遵循谷歌设计指南,这是他们建议的做法。在由于内存不足而崩溃之前,我可以分页浏览大约 12 - 13 个片段。我认为这个问题有几个罪魁祸首。
1.) 我正在使用 FragmentStatePager。当内存成为问题时,这不应该破坏未被查看的片段吗?这没有发生。我以为是自动的。我该怎么做才能做到这一点?这可能与我的 Fragment 实现方式有关吗?我在 onCreateView 中完成所有活动配置。为了彻底起见,我已经包含了这个来源。普通香草在这里:
public static class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return InventoryDetailFragment.newInstance(position);
}
}
2.)我有一种方法试图找出需要下载的图像的大小而不将其放入内存中。然后在下载到所需大小的同时压缩图像。这没有成功实施。但我不确定出了什么问题。
private Bitmap downloadBitmap(String url, int width, int height) {
Bitmap bitmap = null;
int scale = 1;
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
bitmap = BitmapFactory.decodeStream((InputStream)new URL (url).getContent(), null, options);
if (options.outHeight > height || options.outWidth > width) {
scale = (int) Math.max(((options.outHeight)/ height), ((options.outWidth)/ width)); }
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmap = BitmapFactory.decodeStream((InputStream)new URL (url).getContent(), null, o2);
cache.put(url, new SoftReference<Bitmap>(bitmap));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Error e){
Log.d("TEST", "Garbage Collector called!");
System.gc();
}
return bitmap;
}
我已经尝试了所有我知道如何做的事情,但这超出了我对 Android/Java 的微薄掌握。请帮忙!谢谢!