我使用ViewPager类和FragmentStatePagerAdapter适配器创建应用程序。我已经读过,所提到的适配器和FragmentPagerAdapter之间的区别在于后者将所有页面一次存储在内存中,而FragmentStatePagerAdapter在任何给定时间只有3个加载在内存中。FragmentStatePagerAdapter内存问题
所以,这是问题所在。我有一个约50页的ViewPager。每个页面上都有一个ImageView图像(以及其他一些元素)。滚动浏览大约20个独特页面后,我通常会发现内存不足错误。所以,我的问题是:我该如何配置FragmentStatePagerAdapter在任何给定的时间只有大约3页加载到内存中?这是我的适配器的代码:
mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) {
@Override
public Fragment getItem(int position) {
Song song = mSongs.get(position);
return PlayFragment.newInstance(position);
}
@Override
public int getCount() {
return mSongs.size();
}
@Override
public void destroyItem(View collection, int position, Object o) {
View view = (View)o;
((ViewPager) collection).removeView(view);
view = null;
}
@Override
public Object instantiateItem(View context, int position) {
ImageView imageView = new ImageView(getApplicationContext());
imageView.findViewById(R.id.albumimage);
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), position));
((ViewPager) context).addView(imageView);
return imageView;
}
});
destroyItem和instantiateItem方法当前不执行任何操作。我从其他人的问题中读到这些后添加了它们。如果我在我的代码中使用这两种方法,至今没有区别。
我已经阅读过类似于我的其他问题,但是我终于决定在尝试自行解决问题之后提出一个问题,但没有好的结果。
我试着在onDestroy()中设置ImageView为null,但没有发生任何事情。