簡體   English   中英

Laggy 懶人專欄 Android 撰寫

[英]Laggy Lazy Column Android Compose

我在Jetpack Compose中創建了一個完整的應用程序。 但是, Lazy Column的表現非常糟糕,沒有任何意義。 Lazy Column應該是RecyclerView的替代品,但RecyclerView目前的效果要好得多。

我制作了一個帶有標題和Lazy Rows作為項目的Lazy Column (基本上是一個嵌套列表)。 如您所見,有圖像,但我使用了Coil 庫,因此所有內容都應加載到單獨的線程中。 我已經看過這些討論: link1link2 但似乎這個問題沒有解決方案,即使現在Jetpack Compose是穩定的。

你們有沒有找到一種方法來獲得更好的性能,或者我應該用RecyclerView替換這個Lazy Rows嗎?

這是頁面的屏幕:

在此處輸入圖像描述

事情會加速你的懶惰列表

  1. 如果您處於調試模式,那是正常的 如果您的應用程序在調試中滯后,請不要擔心。 完全沒問題。 只需在發布模式下創建 APK(Build -> Generated Signed Bundle/APK),這可能會解決您的問題。 發生這種情況是因為在調試時,Compose 在運行時使用 JIT 翻譯字節碼。
  2. 為您的項目設置密鑰 像這樣初始化你的惰性列表。
LazyColumn() {
    items(
        count = cartItems.size,
        key = {
            cartItems[it].cartItem.id
        },
        itemContent = { index ->
            val cartItemData = cartItems[index]
            CartItemWithActions(data = cartItemData)
            Divider(
                color = colorResource(id =R.color.separator_line)
            )
        }
    )
}

設置密鑰的工作方式類似於RecyclerView中的DiffUtil class 。 檢查Maciej Przybylski 的帖子

  1. 確保您沒有不使用remember{}塊的變量。
@Composable
fun MyComposable() {
    ...
    val wrongList = myViewModel.getList() <- Don't do this
    val correctList = remember { myViewModel.getList() } <- Do this
    ...
}

當然,列表應該是State以便您觀察它是否發生變化。 每次重新組合列表時不使用記住,將調用myViewModel.getList()

  1. 您還可以使用contentType ,它在列表中定義 object 的類型。 如果列表中有標題或不同類型的對象,這很有用。 在這里了解更多。

檢查這些資源再也不會出現性能問題。 我強烈建議觀看這些視頻:優化 Jetpack Compose 的渲染性能、Jetpack Compose性能最佳實踐,並閱讀這篇文章

原始答案

解決了! 閱讀此reddit我發現問題僅在調試版本中。 這看起來很瘋狂,但這是真的。 這是因為 Compose 應用程序的調試版本在后台有很多影響性能的事情(與 Flutter 發生的情況非常相似)。 要解決此問題,您唯一需要做的就是創建應用程序的發布版本。 為此, go構建->生成簽名包/APK 創建密鑰,然后 select release

享受您流暢的應用程序!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM