所以我写一个应用程序应该能够页面通过位于顶部,一个大的640×480的图像和3倍的图像,是被懒惰加载一个画廊的部分详细视图。遵循Google的设计指南,这是他们的建议。由于内存不足,我可以在崩溃之前查看12-13个片段。我认为在这个问题上有几个罪魁祸首。
1.)我正在使用FragmentStatePager。当内存成为问题时,这不应该破坏那些没有被查看的碎片吗?这没有发生。我认为这是自动的。我需要做些什么才能做到这一点?它可能与我如何实现碎片有关吗?我在onCreateView中完成了我所有的Activity配置。为了彻底,我已经包含了这个来源。普通的香草在这里:
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的微薄掌握。请帮忙!谢谢!
谢谢了。我实现了第1点和第2点。我排除了3,只是调用了createScaledBitmap来达到我想要的尺寸。我花了一段时间才将重新加载的循环图像重新加载,找出生命周期中的重新加载它们的位置,但感谢你解决了问题! – Rymnel 2012-04-04 18:41:19