艺术:X的验证花了Y ms

时间:2016-05-03 14:27:51

标签: android performance android-runtime

我的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,但这不是弹出此消息的唯一地点,所以我认为它不直接相关。

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

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

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

2 个答案:

答案 0 :(得分:9)

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

如果您在ART系统上运行DVM应用,那么当dex2oat转换应用时,您会第一次看到此消息。如果您构建定位ART的应用程序,该应用将无法再在DVM上运行,但OAT转换将在安装期间发生,并且在运行时不会显示。

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

答案 1 :(得分:4)

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

enter image description here

默认情况下为开。将其关闭可消除调试时每次启动应用程序时的烦人延迟。