我正在使用ViewPager类和一个FragmentStatePagerAdapter适配器创建一个应用程序。我已经读过,上述适配器与FragmentPagerAdapter的区别在于,后者同时将所有页面存储在内存中,而FragmentStatePagerAdapter在任何给定的时间都只加载了3个页面。
所以,这就是问题所在。我有一个大约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方法目前什么也不做。我是在从别人的问题上读到这件事后加上的。到目前为止,如果我的代码中有这两个方法,那么就没有什么不同了。
我读过其他类似于我的问题,但我最终决定问一个问题后,我自己试图解决问题,但没有好的结果。
我尝试在ImageView ()中将onDestroy设置为null,但什么也没有发生。
发布于 2015-09-04 17:05:53
由BitmapFactory.decodeResource(getResources(), position)创建的BitmapFactory.decodeResource(getResources(), position)必须通过调用Bitmap.recycle()手动释放
https://developer.android.com/training/displaying-bitmaps/manage-memory.html
发布于 2015-09-04 22:57:14
我已经开始使用位图作为ImageView的输入。下面的代码运行良好。
albumimg = BitmapFactory.decodeFile(mSong.getImg());
mImg.setImageBitmap(albumimg);
mImg.setVisibility(View.VISIBLE);在onDestroy()和onDestroyView()中是这样的:
if(albumimg != null) {`albumimg.recycle(); }`谢谢你的帮助。:)
https://stackoverflow.com/questions/32402258
复制相似问题