加载太慢 activity Jetpack Compose

Too slow loading activity Jetpack Compose

我的 activity 使用 Jetpack Compose 加载速度太慢(大约 5 秒)。我有 3 个屏幕,其中有 1 个 Lazy Vertical Grid 和我的自定义底部导航。有人知道如何并行编写此屏幕或使加载速度 activity 更快吗?

我的代码:

@ExperimentalAnimationApi
@ExperimentalFoundationApi
@Composable
fun ComposeNavigation() {
    val navController = rememberNavController()
    ConstraintLayout(modifier = Modifier.fillMaxSize()) {
        val (content, bottomSheet) = createRefs()
        //Bottom is my custom bottom navigation
        Bottom(navController, modifier = Modifier
            .constrainAs(bottomSheet) {
                start.linkTo(parent.start)
                end.linkTo(parent.end)
                bottom.linkTo(parent.bottom)
            }
            .fillMaxWidth())
        Box(modifier = Modifier
            .fillMaxWidth()
            .constrainAs(content) {
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            }) {
            NavHost(
                navController = navController,
                startDestination = "first_screen",
            ) {
                composable("first_screen") {
                    FirstScreen(navController = navController)
                }
                composable("second_screen") {
                    SecondScreen(navController = navController)
                }
                composable("third_screen") {
                    ThirdScreen(navController = navController)
                }
            }
        }
    }
}

在您的 X 屏幕视图中查找渲染瓶颈。

我的一个错误是我用来模仿 neu 阴影的库 https://github.com/CuriousNikhil/neumorphic-compose,它会显着降低渲染性能。消除所有这些影响后,应用程序像火箭一样起飞。

  • 只需 运行 您的应用程序与 Android Studio 分析器 https://developer.android.com/studio/profile/android-profiler(唯一帮助我找到瓶颈的东西)。

  • 其他可能的混淆 - 如果您正在调查 Debug 构建变体的性能。 尝试运行Release一个。 这是我的 Release 配置(注意 Proguard(实际上是 R8)文件):

    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true

            proguardFiles(
                getDefaultProguardFile("proguard-android.txt"),
                "proguard-rules.pro"
            )

            signingConfig = signingConfigs.getByName("release")
        }
    }
  • 最后一个要注意的是,当您的应用程序作为捆绑包从 Play 商店安装时,ART 进一步改进了这一点。