我的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 = …Run Code Online (Sandbox Code Playgroud) 每当我运行我的应用程序(设备或仿真器是相同的)时,即使不对代码进行任何更改,我从最大的Activity中获得的每个方法都如下:
W/art: Verification of void com.xyz.abx.setCredit(boolean) took 343.200ms
Run Code Online (Sandbox Code Playgroud)
由于应用程序很大,因此每次都要花几分钟时间,这确实使我发疯。奇怪的是,它对其他所有较小的活动都没有执行此操作。我有
android:vmSafeMode="true"
Run Code Online (Sandbox Code Playgroud)
在清单中按照SO线程中的建议进行操作,但无济于事。我已阅读此主题
艺术:X的验证花了Y毫秒, 然后阅读了以下文档:https : //developer.android.com/guide/practices/verifying-apps-art