【问题标题】:Art: Verification of X took Y ms艺术:X 的验证花费了 Y 毫秒
【发布时间】:2020-09-17 12:32:54
【问题描述】:

我的 logcat 中有一条警告:

W/art: Verification of void com.myapp.LoginFragment$override.lambda$logIn$5(com.myapp.LoginFragment, java.lang.Throwable) took 217.578ms

代码如下:

subscription = viewModel.logIn()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
               this::showStudioSelection,
               error -> {
                    ErrorResponse errorResponse = ErrorResponseFactory.create(error);

                    if (errorResponse.code() == ApiResult.BAD_REQUEST) {
                       Snackbar.make(getView(), R.string.login_bad_credentials, Snackbar.LENGTH_LONG)
                            .setAction(android.R.string.ok, v -> {})
                            .show();
                    } else {
                        Snackbar.make(getView(), "Unknown error " + errorResponse.code(), Snackbar.LENGTH_LONG)
                            .setAction(android.R.string.ok, v -> {})
                            .show();
                    }
                    viewModel.updateLoginButtonState();
                 }
            );

220ms 相当多(我觉得我注意到该片段的启动存在延迟)。

我正在使用 RxJava 和 retrolambda,但这不是弹出此消息的唯一位置,因此我认为它没有直接关系。

如何影响验证时间?是否值得?

它似乎与圈复杂性有关,因为我可以通过删除 if 中的 Snackbar.make 调用以及更多 dry 代码来摆脱警告: p>

String errorMessage;
if (errorResponse.code() == ApiResult.BAD_REQUEST) {
    errorMessage = getString(R.string.login_bad_credentials);
} else {
    errorMessage = "Unknown error " + errorResponse.code();
}

【问题讨论】:

    标签: android performance android-runtime


    【解决方案1】:

    对于 2020 年及以后寻找解决方案的任何人 - Android 11 在开发者选项中有以下设置:

    默认开启。将其关闭以消除每次调试时启动应用程序时令人讨厌的延迟。

    【讨论】:

    • 然后重新安装一个应用程序。
    【解决方案2】:

    看起来这是对较新的 ART 运行时的“向后兼容性”要求的一部分。也就是说,针对DALVIK 构建的应用也需要能够在ART 上运行。

    如果您在 ART 系统上运行DVM 应用程序,当dex2oat 转换应用程序时,您会在它第一次运行时看到此消息。如果您构建面向ART 的应用程序,该应用程序将无法再在DVM 上运行,但OAT 转换将在安装过程中发生,并且在运行时看不到。

    来源:The Art of Art 请注意,这是对 ART 的三部分调查的第一部分,您可能需要检查部分 twothree

    【讨论】:

    • 我在每次应用程序运行时都会看到此消息,而不仅仅是第一次。我看到消息,杀死应用程序,重新启动它,然后再次看到消息。
    • 你有没有碰巧找到解决这个问题的方法?我在使用 bazel 运行 android 应用程序时得到了这个。当我使用 gradle 构建同一个项目时,它不会发生。
    • 这只是一个警告。烦人但不是问题。
    • 在我的情况下,验证我的一种方法需要 900 多毫秒 - 这是一个问题,当您需要尽快展示您的应用程序时。
    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 2021-05-06
    • 2017-10-24
    • 2017-09-02
    • 2018-09-03
    • 2023-03-09
    • 2017-07-02
    相关资源
    最近更新 更多