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();
}
It looks like this is part of the 'backwards compatibility' requirement for the newer
ART
runtime. That is, apps built againstDALVIK
need to be able to run onART
as well.If you run a
DVM
app on an ART system, you'll see this message the first time it runs whendex2oat
converts the application. If you build the application targetingART
, the app will no longer be able to run onDVM
, but theOAT
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