我的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相当多(我感觉我注意到该Fragment的启动滞后了)。

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

如何影响验证时间? 值得吗?

似乎它与圈复杂度有关,因为我可以通过使用一些更干的代码删除Snackbar.make中的if调用来摆脱警告:
String errorMessage;
if (errorResponse.code() == ApiResult.BAD_REQUEST) {
    errorMessage = getString(R.string.login_bad_credentials);
} else {
    errorMessage = "Unknown error " + errorResponse.code();
}

最佳答案

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

如果您在ART系统上运行DVM应用程序,则在dex2oat转换应用程序时,您将在第一次运行该消息时看到该消息。如果您构建针对ART的应用程序,则该应用程序将不再能够在DVM上运行,但是OAT转换将在安装过程中发生,并且在运行时看不到。

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

关于android - Art : Verification of X took Y ms,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37006954/

10-10 09:18