Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 内置ViewPager的ViewPager很晚才释放内存,这会导致outofmemory_Android_Memory_Xamarin_Android Viewpager - Fatal编程技术网

Android 内置ViewPager的ViewPager很晚才释放内存,这会导致outofmemory

Android 内置ViewPager的ViewPager很晚才释放内存,这会导致outofmemory,android,memory,xamarin,android-viewpager,Android,Memory,Xamarin,Android Viewpager,我有一个ViewPager,由一个FragmentStatePagerAdapter管理。在这个viewpager的片段中,还有另一个使用PagerAdapter(名为GalleryAdapter)的viewpager。此“GalleryAdapter”返回图像视图 我不知道在这里该怎么办。位图的内存在滚动时被释放,但它发生得很晚,我在oneplus设备上进行测试,分配的内存在90MB左右被清除。在垃圾收集之后,它再次从20MB开始,并增长到120MB以上。最后我得到了一个内存异常 我个人认为我

我有一个ViewPager,由一个FragmentStatePagerAdapter管理。在这个viewpager的片段中,还有另一个使用PagerAdapter(名为GalleryAdapter)的viewpager。此“GalleryAdapter”返回图像视图

我不知道在这里该怎么办。位图的内存在滚动时被释放,但它发生得很晚,我在oneplus设备上进行测试,分配的内存在90MB左右被清除。在垃圾收集之后,它再次从20MB开始,并增长到120MB以上。最后我得到了一个内存异常

我个人认为我应该回收位图。但是,当我在imageview上设置ImageBitmap之后回收图像时,我得到了一个错误:尝试使用回收的位图

我不想使用图书馆,因为我想知道我做错了什么

public class GalleryAdapter: PagerAdapter
{
    Context context; 
    List<ArticleImageVO> _data;

    public GalleryAdapter (Context context)
    {
        this.context = context;
        _data = new List<ArticleImageVO> ();
    }

    public override Java.Lang.Object InstantiateItem (Android.Views.ViewGroup container, int position)
    {
        ImageView imageView = new ImageView(context);
        imageView.SetScaleType(ImageView.ScaleType.CenterCrop);
        imageView.SetData (_data [position]);
        ((ViewPager) container).AddView(imageView, 0);
        return imageView;
    }

    public override bool IsViewFromObject (Android.Views.View view, Java.Lang.Object @object)
    {
        return view == ((ImageView) @object);
    }

    public override void DestroyItem (Android.Views.ViewGroup container, int position, Java.Lang.Object @object)
    {
        BitmapDrawable bitmapDrawable = (BitmapDrawable)((ImageView)@object).Drawable;
        if (bitmapDrawable != null && bitmapDrawable.Bitmap != null)
        {
            Bitmap bitmap = bitmapDrawable.Bitmap;
            bitmap.Recycle ();
        }
        ((ViewPager) container).RemoveView(((ImageView)@object) );
    }


    public override int Count 
    {
        get 
        {
            return _data.Count;
        }
    }

    public void SetData(List<ArticleImageVO> data)
    {
        _data.Clear ();
        _data.AddRange (data);
    }

}
上面ViewPagerAdapter中的片段:

public class ArticleDetailAdapter: FragmentStatePagerAdapter
{
    NewsController _newsController = NewsController.Instance;

    public ArticleDetailAdapter (FragmentManager fm) : base (fm)
    {
    }


    public override Fragment GetItem (int position)
    {
        ArticleDetailFragment fragment = new ArticleDetailFragment ();
        fragment.SetArguments(_newsController.ArticlesList[position]);
        return fragment;
    }

    public override int Count 
    {
        get 
        {
            return _newsController.ArticlesList.Count;
        }
    }
}