精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android列表優化終極奧義:DiffUtil讓RecyclerView比德芙還絲滑

移動開發 Android
在電商購物車、即時通訊聊天框、新聞資訊流等高頻操作場景中,很多開發者都遇到過這樣的尷尬:明明只修改了一個商品數量,整個列表卻突然閃動刷新;用戶快速滾動時突然卡頓,體驗直接打骨折。今天我們拆解如何用DiffUtil優化解決這些痛點。

在電商購物車、即時通訊聊天框、新聞資訊流等高頻操作場景中,很多開發者都遇到過這樣的尷尬:明明只修改了一個商品數量,整個列表卻突然閃動刷新;用戶快速滾動時突然卡頓,體驗直接打骨折。今天我們拆解如何用DiffUtil優化解決這些痛點。

為什么notifyDataSetChanged是性能殺手?

假設你的購物車有100件商品,用戶修改了第5件商品的數量:

1. 傳統方案:調用notifyDataSetChanged后,系統會重新創建100個Item視圖

2. 內存消耗:假如每個Item平均占用50KB,瞬間增加5MB內存壓力

3. 界面表現:用戶看到整個列表突然閃爍,滾動位置丟失

4. CPU消耗:遍歷所有Item進行數據綁定,浪費計算資源

// 典型示例(千萬別學!)
fun updateCart(items: List<CartItem>) {
    cartList = items
    // 全量刷新炸彈
    adapter.notifyDataSetChanged() 
}

DiffUtil場景解析

局部更新:電商商品多維度刷新

典型場景:同時處理價格變動、庫存變化、促銷標簽更新

class ProductDiffUtil : DiffUtil.ItemCallback<Product>() {
    overridefun areItemsTheSame(old: Product, new: Product) = old.skuId == new.skuId

    overridefun areContentsTheSame(old: Product, new: Product) = 
        old == new.copy( 
            // 排除實時變化字段
            lastUpdate = old.lastUpdate,
            animationState = old.animationState
        )

    // 返回多個變化的字段組合
    overridefun getChangePayload(old: Product, new: Product): Any? {
        val changes = mutableListOf<String>()
        if (old.price != new.price) changes.add("PRICE")
        if (old.stock != new.stock) changes.add("STOCK")
        if (old.promotionTags != new.promotionTags) changes.add("PROMO")
        returnif (changes.isNotEmpty()) changes elsenull
    }
}

// ViewHolder處理復合更新
overridefun onBindViewHolder(holder: ProductVH, position: Int, payloads: List<Any>) {
    when {
        payloads.isNotEmpty() -> {
            payloads.flatMap { it as List<String> }.forEach { change ->
                when (change) {
                    "PRICE" -> {
                        holder.priceView.text = newItem.getPriceText()
                        holder.startPriceChangeAnimation()
                    }
                    "STOCK" -> holder.stockBadge.updateStock(newItem.stock)
                    "PROMO" -> holder.promotionView.updateTags(newItem.promotionTags)
                }
            }
        }
        else -> super.onBindViewHolder(holder, position, payloads)
    }
}

動態列表:聊天消息的智能處理

高階技巧:支持消息撤回、消息編輯、消息狀態更新(已讀/送達)

class ChatDiffCallback : DiffUtil.ItemCallback<Message>() {
    overridefun areItemsTheSame(old: Message, new: Message): Boolean {
        // 處理消息ID變更場景(如消息重發)
        returnif (old.isRetry && new.isRetry) old.retryId == new.retryId 
               else old.msgId == new.msgId
    }

    overridefun areContentsTheSame(old: Message, new: Message): Boolean {
        // 消息狀態變更不觸發內容變化(避免氣泡重新渲染)
        return old.content == new.content && 
               old.attachments == new.attachments &&
               old.sender == new.sender
    }

    overridefun getChangePayload(old: Message, new: Message): Any? {
        returnwhen {
            old.status != new.status -> MessageStatusChange(new.status)
            old.reactions != new.reactions -> ReactionUpdate(new.reactions)
            else -> null
        }
    }
}

// 在Adapter中處理復雜更新
overridefun onBindViewHolder(holder: MessageViewHolder, position: Int, payloads: List<Any>) {
    when {
        payloads.any { it is MessageStatusChange } -> {
            holder.updateStatusIndicator(payloads.filterIsInstance<MessageStatusChange>().last().status)
        }
        payloads.any { it is ReactionUpdate } -> {
            holder.showReactionAnimation(payloads.filterIsInstance<ReactionUpdate>().last().reactions)
        }
        else -> super.onBindViewHolder(holder, position, payloads)
    }
}

分頁加載時的無縫銜接(新聞資訊流)

混合方案:結合Paging3實現智能預加載

class NewsPagingAdapter : PagingDataAdapter<NewsItem, NewsViewHolder>(NewsDiffUtil) {

    // 優化首次加載體驗
    overridefun onViewAttachedToWindow(holder: NewsViewHolder) {
        super.onViewAttachedToWindow(holder)
        if (holder.layoutPosition == itemCount - 3) {
            viewModel.loadNextPage()
        }
    }

    companionobject NewsDiffUtil : DiffUtil.ItemCallback<NewsItem>() {
        overridefun areItemsTheSame(old: NewsItem, new: NewsItem): Boolean {
            // 處理服務端ID沖突的特殊情況
            return"${old.source}_${old.id}" == "${new.source}_${new.id}"
        }

        overridefun areContentsTheSame(old: NewsItem, new: NewsItem): Boolean {
            // 排除閱讀狀態變化的影響
            return old.title == new.title &&
                   old.content == new.content &&
                   old.images == new.images
        }
    }
}

// 在ViewModel中智能合并數據
fun onNewPageLoaded(news: List<NewsItem>) {
    val current = adapter.snapshot().items
    val merged = (current + news).distinctBy { "${it.source}_${it.id}" }
    adapter.submitData(lifecycle, PagingData.from(merged))
}

復雜結構:樹形目錄的展開/收起

數據結構:支持無限層級的樹形結構

data classTreeNode(
    val id: String,
    val title: String,
    val children: List<TreeNode> = emptyList(),
    var isExpanded: Boolean = false
)

classTreeDiffCallback : DiffUtil.ItemCallback<TreeNode>() {
    overridefun areItemsTheSame(old: TreeNode, new: TreeNode): Boolean {
        // 考慮父節點變化的情況
        return old.id == new.id && old.parentId == new.parentId
    }

    overridefun areContentsTheSame(old: TreeNode, new: TreeNode): Boolean {
        // 排除展開狀態的影響
        return old.title == new.title && 
               old.children.size == new.children.size &&
               old.iconRes == new.iconRes
    }

    overridefun getChangePayload(old: TreeNode, new: TreeNode): Any? {
        returnwhen {
            old.isExpanded != new.isExpanded -> ExpansionChange(new.isExpanded)
            old.children != new.children -> StructureChange
            else -> null
        }
    }
}

// 處理樹形結構更新
fun toggleNode(position: Int) {
    val newList = currentList.toMutableList()
    val node = newList[position]
    newList[position] = node.copy(isExpanded = !node.isExpanded)
    
    if (node.isExpanded) {
        // 收起時移除子節點
        newList.removeAll { it.parentId == node.id }
    } else {
        // 展開時插入子節點
        val children = fetchChildren(node.id)
        newList.addAll(position + 1, children)
    }
    
    submitList(newList) {
        // 自動滾動到展開位置
        recyclerView.smoothScrollToPosition(position)
    }
}

性能優化黑科技

異步計算 + 智能降級

適用場景:

? 高頻更新場景(如股票行情列表)

? 低端機型性能保障

? 快速滾動時的穩定性需求

class SafeDiffUpdater(
    privateval adapter: ListAdapter<*, *>,
    privateval scope: CoroutineScope
) {
    // 最后提交版本控制
    privatevar lastSubmitVersion = 0

    fun safeSubmitList(newList: List<Item>, isForce: Boolean = false) {
        val currentVersion = ++lastSubmitVersion
        scope.launch(Dispatchers.Default) {
            // 計算階段耗時統計
            val calcStart = System.currentTimeMillis()
            val diffResult = try {
                DiffUtil.calculateDiff(createDiffCallback(adapter.currentList, newList))
            } catch (e: Exception) {
                // 降級策略:當計算超時(>50ms)時切換為全量更新
                if (System.currentTimeMillis() - calcStart > 50) nullelsethrow e
            }

            withContext(Dispatchers.Main) {
                if (currentVersion == lastSubmitVersion) {
                    when {
                        diffResult != null -> {
                            adapter.submitList(newList) { diffResult.dispatchUpdatesTo(adapter) }
                        }
                        isForce -> adapter.submitList(emptyList()).also { 
                            adapter.submitList(newList) 
                        }
                        else -> adapter.submitList(newList)
                    }
                }
            }
        }
    }

    // 創建支持中斷的DiffCallback
    privatefun createDiffCallback(old: List<Item>, new: List<Item>): DiffUtil.Callback {
        returnobject : DiffUtil.Callback() {
            // 實現基礎比對方法...
            overridefun areContentsTheSame(oldPos: Int, newPos: Int): Boolean {
                // 每1000次比對檢查一次是否超時
                if (oldPos % 1000 == 0 && System.currentTimeMillis() - calcStart > 50) {
                    throw CancellationException("Diff計算超時")
                }
                return old[oldPos] == new[newPos]
            }
        }
    }
}

? 版本號校驗防止網絡延遲導致的數據錯亂

? 每1000次比對檢查超時(System.currentTimeMillis() - calcStart > 50)

? 異常捕獲機制保證主線程安全

增量更新引擎

適用場景:

? 大型電商商品列表

? 社交媒體的歷史消息加載

? 日志查看器等超長列表場景

class IncrementalUpdateEngine {
    // 內存優化型差異計算
    fun calculateDelta(
        old: List<Item>,
        new: List<Item>,
        batchSize: Int = 500
    ): List<ChangeSet> {
        return sequence {
            var oldIndex = 0
            var newIndex = 0
            while (oldIndex < old.size || newIndex < new.size) {
                // 批量處理避免OOM 分片處理(500項/批)
                val oldBatch = old.subList(oldIndex, min(oldIndex + batchSize, old.size))
                val newBatch = new.subList(newIndex, min(newIndex + batchSize, new.size))

                // 使用位運算快速比對
                val changes = mutableListOf<ChangeSet>()
                for (i in oldBatch.indices) {
                    val oldItem = oldBatch[i]
                    val newItem = newBatch.getOrNull(i) ?: break
                    if (oldItem.id != newItem.id) {
                        changes.add(ChangeSet.Delete(oldIndex + i))
                        changes.add(ChangeSet.Insert(newIndex + i, newItem))
                    } elseif (oldItem != newItem) {
                        changes.add(ChangeSet.Update(newIndex + i, newItem))
                    }
                }
                yieldAll(changes)

                oldIndex += batchSize
                newIndex += batchSize
            }
        }.toList()
    }

    // 使用示例
    fun applyDelta(changes: List<ChangeSet>) {
        val newList = currentList.toMutableList()
        changes.forEach { change ->
            when (change) {
                is ChangeSet.Insert -> newList.add(change.index, change.item)
                is ChangeSet.Delete -> newList.removeAt(change.index)
                is ChangeSet.Update -> newList[change.index] = change.item
            }
        }
        adapter.submitList(newList)
    }
}

智能預加載 + 緩存預熱

適用場景:

? 長圖文混合信息流(如新聞APP)

? 地圖標記點列表

? 支持快速回溯的聊天記錄

class SmartPreloader(
    privateval recyclerView: RecyclerView,
    privateval prefetchDistance: Int = 3
) : RecyclerView.OnScrollListener() {

    // 分級緩存策略
    privateenumclassCacheLevel { HOT, WARM, COLD }
    privateval cache = mutableMapOf<CacheLevel, List<Item>>()

    overridefun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        val layoutManager = recyclerView.layoutManager as LinearLayoutManager
        val firstVisible = layoutManager.findFirstVisibleItemPosition()
        val lastVisible = layoutManager.findLastVisibleItemPosition()

        // 預加載觸發邏輯
        if (lastVisible + prefetchDistance >= adapter.itemCount - 1) {
            loadNextPage() // 常規分頁加載
        }

        // 緩存預熱策略
        val preheatRange = (firstVisible - prefetchDistance).coerceAtLeast(0).. 
                          (lastVisible + prefetchDistance).coerceAtMost(adapter.itemCount - 1)
        preheatCache(preheatRange)
    }

    privatefun preheatCache(range: IntRange) {
        // 三級緩存策略
        cache[CacheLevel.HOT] = currentList.subList(range.first, range.last + 1)
        cache[CacheLevel.WARM] = currentList.subList(
            (range.first - 50).coerceAtLeast(0), 
            (range.last + 50).coerceAtMost(currentList.size)
        )
        cache[CacheLevel.COLD] = currentList
    }

    // 內存優化型數據更新
    fun updateWithCache(newItems: List<Item>) {
        val merged = cache[CacheLevel.HOT]?.let { hot ->
            newItems.map { newItem ->
                hot.find { it.id == newItem.id } ?: newItem
            }
        } ?: newItems
        
        adapter.submitList(merged)
    }
}

對象和內存復用

適用設備:

? 內存 < 2GB 的低端機型

? Wear OS等嵌入式設備

? VR頭顯等高性能要求的設備

object RecyclerViewPoolManager {
    // 全局共享對象池
    privateval viewPool = RecyclerView.RecycledViewPool().apply {
        setMaxRecycledViews(VIEW_TYPE_ITEM, 20)
    }

    // 內存復用控制器
    classItemHolderManager {
        privateval itemCache = object : LruCache<Int, ItemHolder>(10) {
            overridefun create(key: Int): ItemHolder = ItemHolder()
        }

        fun bind(position: Int, item: Item) {
            val holder = itemCache.get(position % 10)
            holder.bind(item)
        }
    }

    // 數據壓縮策略
    fun compressListData(items: List<Item>): ByteArray {
        val output = ByteArrayOutputStream()
        ObjectOutputStream(output).use {
            it.writeInt(items.size)
            items.forEach { item ->
                it.writeLong(item.id)      // 8 bytes
                it.writeUTF(item.title)    // 2 + length
                it.writeFloat(item.price)  // 4 bytes
            }
        }
        return output.toByteArray()
    }
}

// 使用示例
recyclerView.setRecycledViewPool(RecyclerViewPoolManager.viewPool)
val compressedData = RecyclerViewPoolManager.compressListData(hugeList)
val parsedList = RecyclerViewPoolManager.parseCompressedData(compressedData)

組合使用建議

? 電商APP商品列表:異步計算 + 增量引擎

? 即時通訊聊天:智能預加載 + 內存優化

? 地圖標記點列表:增量引擎 + 緩存預熱

? 智能手表應用:內存優化 + 異步計算

避坑指南(血淚教訓)

? ?? ID碰撞陷阱:確保item.id唯一且穩定

? ??? 數據不可變性:使用data class時用val修飾

? ?? 列表引用問題:提交新數據必須創建新集合

? ?? 內存泄漏防護:銷毀時取消異步計算

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2023-10-06 20:46:27

開發工具開發代碼

2021-11-17 08:16:03

內存控制Go

2025-03-03 12:00:00

JavaScriptfor 循環語言

2017-08-18 15:54:16

RecyclerVieDiffUtil數據

2018-06-11 14:14:22

2021-07-14 13:46:28

KubeVela阿里云容器

2020-07-22 15:15:28

Vue前端代碼

2025-03-10 08:44:17

2025-05-12 08:21:15

2024-05-30 11:44:37

2023-09-27 07:49:23

2025-06-04 08:35:00

立即執行函數IIFEJavaScript

2020-05-29 11:27:27

VS Code遠程工具

2023-03-15 15:54:36

Java代碼

2022-08-28 10:08:53

前端代碼前端

2022-09-05 13:16:42

MicroVim編輯器

2021-01-18 18:42:33

工具調優開發

2022-03-18 13:59:46

緩存RedisCaffeine

2025-10-17 08:07:36

2023-06-26 08:01:42

debugger技巧代碼
點贊
收藏

51CTO技術棧公眾號

夜夜精品视频| 久久久伦理片| 亚洲男同性视频| 成人黄动漫网站免费| 国产女同在线观看| 色综合综合色| 欧美一区二区三区系列电影| 日本欧美视频在线观看| 欧美扣逼视频| 久久精品av麻豆的观看方式| 欧美激情视频一区二区| 高潮毛片无遮挡| 99久久999| 欧美小视频在线观看| 在线播放 亚洲| 久久精品色图| 国产精品99久久久久久久女警| 4p变态网欧美系列| 欧美日韩成人免费观看| 男男gay无套免费视频欧美| 欧美精品亚洲二区| 国产精品无码专区av在线播放| 麻豆网站在线免费观看| 91亚洲男人天堂| 亚洲最大福利视频网| 69xxxx国产| 欧美日韩伊人| 最新国产成人av网站网址麻豆| 97精品人妻一区二区三区蜜桃| 成人国产精选| 色综合天天综合色综合av| 国产精品第157页| 日韩黄色影院| 国产亚洲一本大道中文在线| 国产精品一区二区三区在线观 | 搡的我好爽在线观看免费视频| 伊人久久av| 亚洲高清免费观看高清完整版在线观看| 午夜精品短视频| 青青草视频在线免费观看| 国产·精品毛片| 91久久精品国产91性色| 中文字幕 亚洲视频| 久久精品亚洲一区二区| 性色av一区二区三区红粉影视| 欧美视频www| 婷婷亚洲五月| 日韩专区中文字幕| 国产精品久久免费观看| 国产欧美日韩视频在线| 日韩高清人体午夜| 成人区人妻精品一区二| 香港久久久电影| 日韩三级免费观看| 成人三级做爰av| 精品国产鲁一鲁****| 欧美久久久久久蜜桃| 五月六月丁香婷婷| 成人97精品毛片免费看| 欧美一区二区大片| 色哟哟免费视频| 日韩成人精品| 精品美女在线播放| 亚洲一二三四五| 精品欧美午夜寂寞影院| 日韩精品久久久久久福利| 精品一区二区视频在线观看| 九九热hot精品视频在线播放| 亚洲黄色av女优在线观看| 一级特黄a大片免费| 色吊丝一区二区| 亚洲色图校园春色| eeuss中文字幕| 婷婷综合在线| 欧美激情欧美激情| 狠狠躁夜夜躁人人爽天天高潮| 99精品欧美| 日本精品久久久久久久| 一级片在线免费播放| 久久成人精品无人区| 亚洲在线www| 三级网站在线看| 暴力调教一区二区三区| 日本不卡高清视频一区| 毛片在线播放a| 亚洲一区二区四区蜜桃| 青青视频在线播放| 亚洲欧洲一二区| 亚洲精品一区二区三区在线观看| 欧美一级片黄色| 欧美亚洲在线日韩| 欧美巨猛xxxx猛交黑人97人| 你懂的国产视频| 蜜桃av噜噜一区二区三区小说| 92福利视频午夜1000合集在线观看| www.97av| 久久精品一区二区| 免费的av在线| 一区二区三区电影大全| 欧美久久久久中文字幕| 国产精品久久久久久久无码| 欧美肉体xxxx裸体137大胆| 色伦专区97中文字幕| 国产精品成人网站| 麻豆精品在线观看| 国产综合色一区二区三区| 国产亚洲依依| 亚洲国产日韩a在线播放| 国产又黄又猛又粗| 久久成人福利| 久久中文字幕视频| 久久人人爽人人爽人人片av免费| 国产一区二区成人久久免费影院| 久久精品magnetxturnbtih| 免费av在线播放| 色综合久久综合网97色综合| 台湾佬美性中文| 欧美一站二站| 91精品国产免费久久久久久| 国产色片在线观看| 国产亚洲人成网站| 欧美三级在线观看视频| 国产精品日本一区二区三区在线 | a视频在线免费看| 欧美性开放视频| 国产高潮视频在线观看| 亚洲自拍偷拍网| 国产精品国产亚洲伊人久久 | 亚洲丝袜美腿一区| 久久久噜噜噜久久中文字免| 97超碰人人草| 国产欧美精品国产国产专区| 成人免费aaa| 97久久综合精品久久久综合| 久久久精品中文字幕| 成人一二三四区| 91色乱码一区二区三区| 欧美精品一区二区三区三州| 视频亚洲一区二区| 日韩在线视频网| 中文在线免费看视频| 国产色爱av资源综合区| 国产欧美高清在线| 亚洲丝袜啪啪| 国产成人免费av| 裸体xxxx视频在线| 日本福利一区二区| 爱爱免费小视频| 羞羞答答国产精品www一本| 韩国精品一区二区三区六区色诱| 18av在线播放| 日韩欧美123| 麻豆一区产品精品蜜桃的特点| 国产一区 二区 三区一级| 在线免费观看一区二区三区| 精品久久在线| 久久久91精品| 99在线观看精品视频| 亚洲黄色av一区| 国产免费a级片| 99精品视频免费观看视频| 久久99九九| 国产超碰精品| 丝袜亚洲另类欧美重口| 一级黄色片在线播放| **性色生活片久久毛片| 日韩a一级欧美一级| 91精品电影| 国产一区二区三区色淫影院| 综合毛片免费视频| 中文字幕亚洲一区在线观看| 国产口爆吞精一区二区| 亚洲最大成人网4388xx| 7788色淫网站小说| 日韩在线a电影| 永久久久久久| 超碰97久久| 国产成人精品久久久| 午夜视频在线看| 日韩欧美国产成人一区二区| 青青操免费在线视频| 欧美激情综合五月色丁香小说| 在线播放av中文字幕| 欧美久久影院| 欧美日韩精品免费在线观看视频| www.精品国产| 欧美极品欧美精品欧美视频| 美国一级片在线免费观看视频 | 精品av中文字幕在线毛片| 欧美色国产精品| 亚洲色婷婷一区二区三区| caoporm超碰国产精品| 欧美自拍小视频| 女人色偷偷aa久久天堂| 久久人人爽爽人人爽人人片av| 国产91欧美| 91精品国产一区| 成人午夜在线影视| 国产视频精品在线| 国产精品老熟女视频一区二区| 亚洲风情在线资源站| 成人在线观看免费高清| 成人av综合一区| 伊人国产在线视频| 国产日韩1区| 九九久久九九久久| 精品久久电影| 好吊色欧美一区二区三区四区| 福利一区视频| 欧美在线观看一区二区三区| 黄色在线免费看| 亚洲女人天堂色在线7777| 精品人妻无码一区二区| 欧美亚洲国产一区在线观看网站| 国产在线观看成人| 亚洲视频每日更新| 国产123在线| 91蝌蚪porny九色| 又黄又色的网站| 激情久久五月天| 黄色在线视频网| 久久动漫亚洲| 色综合久久久久无码专区| 欧美在线看片| 欧美日韩视频免费在线观看| 欧美日韩在线观看视频小说| 久久伦理网站| 欧美18xxxx| 国产伦精品一区二区三区在线 | 国产69精品久久777的优势| 国产色视频在线播放| 久久资源在线| 缅甸午夜性猛交xxxx| 欧美网站在线| 午夜啪啪福利视频| 欧美好骚综合网| 亚洲高清视频在线观看| 国产日产一区| 欧美欧美一区二区| 你微笑时很美电视剧整集高清不卡| 成人免费视频观看视频| 香港久久久电影| 国产99在线免费| 北条麻妃在线一区二区免费播放| 成人欧美一区二区三区视频xxx| 精品久久久久久久久久岛国gif| 国产这里只有精品| 中文字幕成人| 亚洲最大福利网| 成人激情自拍| 国产一区二区精品在线| 卡通动漫国产精品| 蜜桃久久精品乱码一区二区| 亚洲区小说区| 水蜜桃亚洲精品| 97色伦图片97综合影院| 日韩中文在线字幕| 韩国自拍一区| www黄色av| 日韩av高清在线观看| 日韩精品视频一二三| 精品一二三四区| 国产成人精品综合久久久久99 | 国产乱淫av一区二区三区| a级大片免费看| 国产成人av在线影院| 亚洲久久久久久| 国产午夜精品久久久久久久| 毛片视频免费播放| 亚洲精品五月天| 日韩黄色a级片| 在线日韩av片| 国产又粗又黄又爽的视频| 日韩免费观看高清完整版在线观看| 丁香花免费高清完整在线播放| 日韩av影片在线观看| 成人18在线| 欧美人在线视频| 澳门成人av网| 国产日韩欧美影视| 粉嫩av一区二区| 欧美一区二区影视| 你懂的亚洲视频| 韩国一区二区av| 国产真实乱偷精品视频免| 香港三日本8a三级少妇三级99| 久久先锋影音av鲁色资源| 国精产品一区一区| 亚洲高清一区二区三区| 亚洲大尺度在线观看| 日韩一区二区免费高清| 日韩一区av| 久久香蕉国产线看观看网| 18aaaa精品欧美大片h| 国产精品第3页| 一区二区三区高清在线观看| 欧美日韩国产精品一卡| 欧美精品日本| 久久精品免费网站| 成人性生交大片| 岛国片在线免费观看| 精品久久中文字幕久久av| 国产免费叼嘿网站免费| 亚洲精品在线91| 成人短视频在线观看| 欧美在线欧美在线| 日本精品国产| 五月天久久综合网| 亚洲免费观看| 成人性生交视频免费观看| 久久蜜桃av一区精品变态类天堂 | 色哟哟一区二区在线观看| 99久久国产免费| 亚洲午夜久久久久久久| 蜜臀av国内免费精品久久久夜夜| 国产精品视频999| 欧美色图婷婷| r级无码视频在线观看| 国产在线精品一区二区不卡了| 亚洲成人黄色av| 欧美日韩精品二区| 好吊视频一二三区| 久热精品在线视频| 国产成人精品一区二区三区免费| 国产精品亚洲综合| 亚洲深深色噜噜狠狠爱网站| 999精品网站| bt7086福利一区国产| 午夜写真片福利电影网| 欧美日本韩国一区二区三区视频| 青梅竹马是消防员在线| 97在线观看免费高清| 亚洲一二三区视频| 欧美大片免费播放| 国产乱码字幕精品高清av | 最新成人av网站| 色欲无码人妻久久精品| 亚洲美女视频在线观看| 一区二区美女视频| 日韩中文字幕不卡视频| 狠狠久久伊人中文字幕| 日韩一区二区三区高清| 久久综合图片| 日韩女同一区二区三区| 欧美性色综合网| 成人亚洲综合天堂| 国产精品久久久久久久久免费看| 精品国精品国产自在久国产应用| 成年人免费在线播放| 97aⅴ精品视频一二三区| 国产精品999在线观看| 日韩不卡中文字幕| 欧美成人黑人| 日韩视频在线播放| 麻豆免费看一区二区三区| 后入内射无码人妻一区| 在线电影国产精品| 亚洲精品白浆| 国产在线一区二区三区播放| 国产欧美另类| 日韩毛片无码永久免费看| 欧美日韩一区国产| 成人三级网址| 国产精品入口免费| 亚洲欧美久久久| 人人妻人人澡人人爽| 欧美日韩不卡一区二区| 日韩经典av| 久久久久久99| 蜜臀国产一区二区三区在线播放| 99成人在线观看| 欧美r级在线观看| 小早川怜子影音先锋在线观看| 三区精品视频观看| 国产精品一区二区免费不卡 | 四季久久免费一区二区三区四区| 俄罗斯精品一区二区| 亚欧美中日韩视频| 久艹在线观看视频| 亚洲第一男人天堂| 成人软件在线观看| 国产精品久久成人免费观看| 风间由美性色一区二区三区 | 无码人妻丰满熟妇奶水区码| 精品久久久久久久久久久久包黑料 | 中文字幕亚洲一区二区三区五十路| www.久久爱.com| 免费拍拍拍网站| 亚洲国产精品高清| 精品国产伦一区二区三| 国产91久久婷婷一区二区| 婷婷激情综合| 国精产品一区一区三区免费视频| 欧美日韩在线一区二区| 丰乳肥臀在线| 天堂av一区二区| www.亚洲在线| 国产人妖一区二区| 国产成人一区三区| 亚洲婷婷免费|