在ViewPager中滑动多个图像时出现OutOfMemory错误

时间:2013-07-15 15:58:42

标签: android android-viewpager out-of-memory

我在Activity中使用ViewPager对象。此viewpager用作显示多种类型片段的图库(TextFragment仅显示文本,ImageFragment,VideoFragment等)。

我正在使用FragmentStatePagerAdapter,它从我收集的内容(并由我自己看到)中释放了viewpager的先前元素,当您浏览它们时。

如果我只是通过画廊正常滑动它工作正常,看着LogCat显示正在分配和释放的内存(至少,对我来说似乎是合适的)。但是如果我在画廊中滑动得太快,似乎VM无法足够快地释放内存,最终我得到OutOfMemory异常。

有没有办法阻止这种情况?

这是我初始化活动的地方。

    @Override
    public void onCreate(Bundle savedInstanceState) {

mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setCurrentItem(currentItem);
        mPager.setAdapter(mAdapter);
        mPager.setOffscreenPageLimit(0);

        CirclePageIndicator indicator = (CirclePageIndicator) findViewById(R.id.indicator);
        mIndicator = indicator;
        indicator.setViewPager(mPager);
 }

这是我的适配器:

public class MyAdapter extends FragmentStatePagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return multimediaList.size();
        }

        @Override
        public Fragment getItem(int position) {
            Multimedia m = multimediaList.get(position);
            if (m.getTipo() == MMType.Imagen) {
                ImageFragment ifragment = new ImageFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("id", m.getId());
                ifragment.setArguments(bundle);
                return ifragment;
            }
            else if (m.getTipo() == MMType.Video) {
                VideoFragment ifragment = new VideoFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("id", m.getId());
                ifragment.setArguments(bundle);
                return ifragment;
            }

            else if (m.getTipo() == MMType.LabeledImage) {
                LabeledImageFragment ifragment = new LabeledImageFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("id", m.getId());
                ifragment.setArguments(bundle);
                return ifragment;

            }
            else if (m.getTipo() == MMType.Texto) {
                TextFragment ifragment = new TextFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("id", m.getId());
                ifragment.setArguments(bundle);
                return ifragment;

            }

            return null;
        }

    }

0 个答案:

没有答案