Art: Verification of X took Y ms

对着背影说爱祢 提交于 2019-12-30 00:59:28

问题


I've got a warning in my logcat:

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

Here's the code:

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 is quite a lot (and I feel like I'm noticing a lag on startup of that Fragment).

I'm using RxJava and retrolambda, but this is not the only spot where this message pops up so I don't think it's directly related.

How can I influence the verification time? Is it even worth it?

It seems like it has something to do with cyclomatic complexity, since I could get rid of the waring by removing the Snackbar.make calls in the if with some more dry code:

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

回答1:


It looks like this is part of the 'backwards compatibility' requirement for the newer ART runtime. That is, apps built against DALVIK need to be able to run on ART as well.

If you run a DVM app on an ART system, you'll see this message the first time it runs when dex2oat converts the application. If you build the application targeting ART, the app will no longer be able to run on DVM, but the OAT conversion will happen during installation and is not seen at runtime.

Source: 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



来源:https://stackoverflow.com/questions/37006954/art-verification-of-x-took-y-ms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!