RecyclerView 从后端加载 10000+ 张图像 api

RecyclerView load 10000+ image from backend api

我在后端 API 中得到 JSON 数据。

[
  {
    id: "is random"
    image: "my url"
  },
  ......10000+
]

我的id是随机数,没有连续性

每个 json 对象都有图像。

我调用 api 并将数据放入 RecyclerView .

但是显示RecyclerView的时候会卡死或者崩溃

我使用Glide加载图片。

GlideApp.with(context).load(myUrl).placeholder(myPlaceholder).into(uiImage)

怎样才能让RecyclerView顺利阅读?

能否使用Paging Library让它在开头显示五个数据?

但是我不知道哪种DataSource适合我的json格式

ItemKeyedDataSource?或 PageKeyedDataSource?或 PositionalDataSource?

更新:

class MyAdapter(): ListAdapter<Item, ItemHolder>(Item.DIFF_CALLBACK){
   override fun onCreateViewHolder(parent: ViewGroup, type: Int): ItemHolder=
        ItemHolder(LayoutInflater.from(parent.context), parent).also {}

   override fun onBindViewHolder(holder: ItemHolder, position: Int): Unit = 
     with(holder) {
        val item = getItem(position)
        uiTextView.text = item.id
        GlideApp.with(context).load(item.image).placeholder(myPlaceholder).into(uiImage)
    }
}

更新:

class ItemHolder(inflater: LayoutInflater, parent: ViewGroup)
    : RecyclerView.ViewHolder(inflater.inflate(R.layout.my_Item, parent, false)) {
    val uiTextView: TextView = itemView.findViewById(R.id.my_textView)
    val uiImage: ImageView = itemView.findViewById(R.id.my_image)
}

如果我删除占位符,有时它会崩溃。

GlideApp.with(context).load(myUrl).into(uiImage)

日志消息:

I/Choreographer: Skipped 3660 frames!  The application may be doing too much work on its main thread.

inject GlideApp,而不是每次都创建新的实例,这会让你的应用更流畅。

另外,如果您正在使用 Paging Library,则使用 PagedListAdapter.