艺术:X的验证花了Y ms

Lov*_*vis 15 performance android android-runtime

我的logcat中有一个警告:

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

这是代码:

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();
                 }
            );
Run Code Online (Sandbox Code Playgroud)

220ms是相当多的(我觉得我注意到片段启动时滞后).

我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)

use*_*855 23

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

在此处输入图片说明

默认是开启的。关闭它以消除每次调试时启动应用程序时烦人的延迟。


Dav*_*ara 9

看起来这是新ART运行时的"向后兼容性"要求的一部分.也就是说,构建的应用程序也DALVIK需要能够运行ART.

如果您DVM在ART系统上运行应用程序,则在dex2oat转换应用程序时第一次运行时会看到此消息.如果您构建应用程序目标ART,则该应用程序将无法继续运行DVM,但OAT转换将在安装期间发生,并且在运行时不会显示.

来源:艺术的艺术 注意这是艺术三部分组成的调查的一部分之一,你可能需要检查的部件23

  • 就我而言,我的一种方法的验证花费了 900 多毫秒 - 当您需要尽快展示您的应用程序时,这是一个问题。 (5认同)
  • 每次*应用程序运行时,我都会看到此消息*,而不仅仅是第一次.我看到了消息,杀了应用程序,再次启动它,然后再次看到该消息. (4认同)