首页 > 解决方案 > Jetpack Compose 加载活动太慢

问题描述

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

我的代码:

@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)
                }
            }
        }
    }
}

标签: androidandroid-jetpack-composeandroid-bottomnav

解决方案


X在屏幕视图中寻找渲染瓶颈。

我的一个错误是,我用来模仿神经阴影的库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 进一步改进了这件事。

推荐阅读