繁体   English   中英

Android碎片与位图使用相关的内存泄漏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM