[英]Android Fragments memory leak related to Bitmap usage
我正在尝试创建一些相册应用。 但是,当创建新的Fragment时,旧的Fragments保留下来,并且其中包含的Bitmaps正在迅速填充我的内存,从而导致内存不足错误。
这是我正在尝试做的事情:
假设我有3个类别。 婚纱照,暑假等。 单击每个类别后,我要在其旁边的片段中显示照片。
对于主视图,我正在使用MasterDetailFlow模板中的FragmentActivity(在Eclipse中创建新的Android项目时)。 因此,基本上它有一个带有listView的片段(这里是我的类别)和framelayout来放置我的另一个片段。
因为我想为图片使用ViewPager,所以我创建了Fragment
android.support.v4.view.ViewPager
在framelayout内部(在Activity onItemSelected:中):
fragment = new PagerFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
.replace(R.id.item_detail_container, fragment).commit();
这个片段基本上只是用来设置的:
onCreateView ....
rootView = inflater.inflate(R.layout.pager, container, false);
myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
getActivity().getSupportFragmentManager(), pictures);
mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
mViewPager.setAdapter(myFragmentStatePagerAdapter);
return rootView;
另一方面,适配器在getItem方法中创建新的PictureFragment。
PictureFragment使用BitmapFactory和LruCache来获取图片。 我将WeakReference存储到位图在PictureFragment和onDestroyView()中,我称之为:
if (bitmapReference !=null){
bitmapReference.get().recycle();
bitmapReference = null;
}
现在解决问题。 在一个PagerFragment中,一切看起来都不错。 PicturesFragments被创建并销毁。 记忆似乎受到控制。 但是,当我单击其他列表元素上的活动时,问题就开始了。 我在日志中看到为pager View创建了两个新的片段,可以看到在PagerFragment上调用了onDestroyView()方法,但在PictureFragment上没有调用,我认为这导致位图没有被回收。 因此出现内存不足错误。 那我该怎么办呢? 如何删除内部的PicturesFragment和位图?
感谢帮助
w ^
不知道这是否是相同的问题,但是前一段时间我在viewpager上遇到了一个问题,其中片段生命周期方法从未被调用过,而问题出在片段管理器上。
因此,在以下位置创建适配器时:
myFragmentStatePagerAdapter = new MyFragmentStatePagerAdapter(
getActivity().getSupportFragmentManager(), pictures);
请尝试使用childFragmentManager而不是supportFragmentManager,看看它是否可以解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.