Оптимизация RecyclerViewAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Оптимизация RecyclerView

Сообщение Anonymous »

Я работаю над приложением, в котором у меня есть 2 фрагмента в viewpager. Во втором фрагменте я использую recyclerview, где загружаю в него изображения. Проблемы, с которыми я столкнулся, связаны с блокировкой пользовательского интерфейса. когда я запускаю приложение из Android Studio, а затем выбираю вкладку просмотра 2. оно мгновенно отображает данные, не тратя времени, вы можете сказать максимум от 4 до 5 миллисекунд. Но когда я закрываю приложение самостоятельно, затем открываю его и открываю вкладку просмотра 2, он удерживает/блокирует пользовательский интерфейс до тех пор, пока все представления не будут привязаны.
Я использую Glide для отображения изображений. Я пробовал много модификаций, но лучшего результата не добился. вот мой код.
class MyVideoAdp(
private val context: Context,
val callback: (Int) -> Unit
) :
RecyclerView.Adapter() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVideoVH {
val binding = VideosItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return MyVideoVH(binding)
}

override fun getItemCount(): Int {
return mDiffer.currentList.size
}

override fun onBindViewHolder(holder: MyVideoVH, position: Int) {
val item = mDiffer.currentList[position]
holder.bind(item)
}

inner class MyVideoVH(private val binding: VideosItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: VideoModel) {

GlideApp.with(context)
.load(item.filePath)
.encodeFormat(Bitmap.CompressFormat.JPEG)
.encodeQuality(10)
.thumbnail(0.1f) // Reduce thumbnail size to load faster
.override(binding.videoThumbnail.width / 2, binding.videoThumbnail.height / 2) // Load a smaller size
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) // Cache the final image
.placeholder(drawable.placeholder_ic)
.dontAnimate() // Disable animations to make loading faster
.into(binding.videoThumbnail)

binding.videoTitle.text = item.fileName // Use the correct property for video title
binding.videoDuration.text =
Utils.formatDuration(item.duration) // Helper method to format duration
binding.videoTimeStamp.text =
item.creationDate // Use a date formatter if needed

Log.d(TAG, "onViewCreated: 5 ${System.currentTimeMillis()}")
}
}
object DiffUtilCallback : DiffUtil.ItemCallback() {
override fun areItemsTheSame(oldItem: VideoModel, newItem: VideoModel): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: VideoModel, newItem: VideoModel): Boolean {
return oldItem == newItem
}
}

private val mDiffer = AsyncListDiffer(this, DiffUtilCallback)

fun submitList(list: MutableList) {
mDiffer.submitList(list)
}

}
@AndroidEntryPoint
class MyVideosFragment : Fragment() {
private var _binding: FragmentMyVideosBinding? = null
private val binding get() = _binding!!
private val viewModel by activityViewModels()

private var adp: MyVideoAdp? = null

@Inject
lateinit var glide: RequestManager

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
_binding = FragmentMyVideosBinding.inflate(layoutInflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lifecycleScope.launch {

setAdp()
setObserver()
}

}

private fun setObserver() {
Log.d(TAG, "onViewCreated: 3 ${System.currentTimeMillis()}")
viewModel.getAllVideoFiles().observe(viewLifecycleOwner) {
Log.d(TAG, "onViewCreated: 4 ${System.currentTimeMillis()}")
adp?.submitList(it.toMutableList())
}
}

private fun setAdp() {
Log.d(TAG, "onViewCreated: 1 ${System.currentTimeMillis()}")
adp = MyVideoAdp(requireContext()) {

}
binding.myVideosRecycler.setItemAnimator(DefaultItemAnimator())
binding.myVideosRecycler.adapter = adp
Log.d(TAG, "onViewCreated: 2 ${System.currentTimeMillis()}")
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

}


Подробнее здесь: https://stackoverflow.com/questions/790 ... timization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»