艺术: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 在开发人员选项中具有以下设置:
默认开启。在调试时将其关闭以消除每次启动应用程序时令人讨厌的延迟。
我的 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 在开发人员选项中具有以下设置:
默认开启。在调试时将其关闭以消除每次启动应用程序时令人讨厌的延迟。