Android,RecyclerView:何时回收,何时不回收?

时间:2018-12-12 10:23:08

标签: android android-recyclerview

我仍在使用流畅的回收器视图来加载图像,而不会过多地阻塞ui线程。

问题在于单词“回收”本身。 在我的应用程序中,我有一长串包含mp3文件的列表,这些文件的名称,歌手和专辑封面都不同。

但是,它们都使用相同的布局。

但是我现在可以回收视图了吗?

由于正确加载相册封面(也可以裁剪)占用了最多资源,因此我决定不回收带有相册封面的视图,而仅回收那些没有相册封面的视图,就像这样:

 private async Task SetContentAsync(PhotoViewHolder vh, int position)
        {
            string SongName = "";
            string ArtistName = "";
        Bitmap bitmap = null;
        byte[] data = null;


        try
        {
            reader.SetDataSource(mp3Obj[position].Mp3Uri);
        }
        catch { }


        await Task.Run(() => // cause problems with the reload
        {
            SongName = reader.ExtractMetadata(MediaMetadataRetriever.MetadataKeyTitle);
            ArtistName = reader.ExtractMetadata(MediaMetadataRetriever.MetadataKeyArtist);

            data = reader.GetEmbeddedPicture();

            if (data != null)
            {
                try
                {
                    bitmap = BitmapFactory.DecodeByteArray(data, 0, data.Length);
                }
                catch {  }


            }
        });

        ((Activity)ctx).RunOnUiThread(() =>
        {

            vh.SongName.SetTypeface(tf, TypefaceStyle.Normal);
            vh.AristName.SetTypeface(tf, TypefaceStyle.Normal);
            vh.SongName.Text = SongName;
            vh.AristName.Text = ArtistName;

            try
            {
                if (bitmap != null)
                {
                    vh.IsRecyclable = false; // MOST IMPORTANT THING TO DO!
                    ConvertBitmapToBackground(bitmap, vh, false); // Set As Backgorund, blurry and black ( just sets the variable)
                    CutImageIntoForm(bitmap, vh); // Set as the musical note button
                }
                else // because recycler items inherit their shit and if it is altered it just shows views were there shouldnt be any ... 
                {
                    vh.IsRecyclable = true;
                    //  vh.CoverArt.SetImageResource(Resource.Drawable.btn_musicalnote);
                    //  ConvertBitmapToBackground(bitmap, vh, true); // Set As Backgorund, blurry and black ( just sets the variable)

                }
            }
            catch { }

        });


    }

请注意,根据是否有专辑封面,我怎么说“ vh.IsRecyclable = ...”?

这是滞后最少的解决方案,并且只有很少的视图包含专辑封面时才有效。但是,当用户所有歌曲都带有专辑封面时,回收站视图将变得非常慢。

我遇到的另一个问题是,有时在出现滞后时,视图会翻倍甚至三倍。仍然指向正确的文件,但是它们都具有相同的歌曲名称。

那么什么是最佳实践? 什么时候可以回收视图,什么时候不可以? 如何加快回收站视图?

非常感谢您的回答!

0 个答案:

没有答案