如何解决 "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements" 警告?
How to resolve "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements" warning?
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.legalInformationLL:
startActivity(new Intent(AboutActivity.this, LegalInformation.class));
break;
case R.id.backIB:
finish();
break;
}
}
对于此代码“资源 ID 在 Android Gradle 插件版本 5.0 中将是非最终的,避免在 switch case 语句中使用它们”警告出现。可能的解决方案是什么?如果我将此代码更改为:
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.legalInformationLL) {
startActivity(new Intent(AboutActivity.this, LegalInformation.class));
} else if (id == R.id.backIB) {
finish();
}
}
警告消失;但是与 if 语句相比,switch 语句的性能更好。那么有什么可能的解决方案可以更快更有效地工作?
出现此问题是因为 ADT 14 资源标识符不再是最终标识符。
请参阅下一个 link,其中 Google 指出要使用 "if/else" 条件作为替代:
http://tools.android.com/tips/non-constant-fields
话虽这么说。在性能方面,"switch" 语句的性能可能优于 "if/else" 条件。
但是,在您的情况下,您不会获得或失去性能或效率。
"switch" 语句可能提供的性能类型必须考虑到可能需要高效率的更具体的边缘情况,例如渲染循环,或专注于效率的算法。
对于您的 use-case,使用 "if/else" 条件是一个没有效率问题的好解决方案。
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.legalInformationLL:
startActivity(new Intent(AboutActivity.this, LegalInformation.class));
break;
case R.id.backIB:
finish();
break;
}
}
对于此代码“资源 ID 在 Android Gradle 插件版本 5.0 中将是非最终的,避免在 switch case 语句中使用它们”警告出现。可能的解决方案是什么?如果我将此代码更改为:
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.legalInformationLL) {
startActivity(new Intent(AboutActivity.this, LegalInformation.class));
} else if (id == R.id.backIB) {
finish();
}
}
警告消失;但是与 if 语句相比,switch 语句的性能更好。那么有什么可能的解决方案可以更快更有效地工作?
出现此问题是因为 ADT 14 资源标识符不再是最终标识符。
请参阅下一个 link,其中 Google 指出要使用 "if/else" 条件作为替代:
http://tools.android.com/tips/non-constant-fields
话虽这么说。在性能方面,"switch" 语句的性能可能优于 "if/else" 条件。
但是,在您的情况下,您不会获得或失去性能或效率。
"switch" 语句可能提供的性能类型必须考虑到可能需要高效率的更具体的边缘情况,例如渲染循环,或专注于效率的算法。
对于您的 use-case,使用 "if/else" 条件是一个没有效率问题的好解决方案。