艺术:X 的验证花费了 Y 毫秒

Art: Verification of X took Y ms

我的 logcat 中收到警告:

W/art: Verification of void com.myapp.LoginFragment$override.lambda$logIn(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();
                 }
            );

220 毫秒很多(我觉得我注意到该片段的启动滞后)。

我正在使用 RxJava 和 retrolambda,但这不是唯一会弹出此消息的地方,所以我认为它们没有直接关系。

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

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

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

看起来这是 'backwards compatibility' 更新 ART 运行 时间要求的一部分。也就是说,针对 DALVIK 构建的应用程序也需要能够 运行 ART

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

来源:The Art of Art note this is part one of a three part investigation of ART and you may need to check parts two and three

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

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