【问题标题】:How to resolve "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements" warning? [duplicate]如何解决“资源 ID 在 Android Gradle 插件版本 5.0 中将是非最终的,避免在 switch case 语句中使用它们”警告? [复制]
【发布时间】:2020-10-13 12:34:33
【问题描述】:
 @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 语句的性能更好。那么有什么可能的解决方案可以更快地高效运行?

【问题讨论】:

  • 当我将鼠标悬停在显示该警告的代码上时,android studio 4.1 中没有显示快速修复。
  • 定义本地final并替换switch case:final int id1 = R.id.legalInformationLL;案例 id1:

标签: android warnings


【解决方案1】:

出现问题是因为 ADT 14 资源标识符不再是最终的。

查看下一个链接,其中 Google 声明使用 "if/else" 条件作为替代:

http://tools.android.com/tips/non-constant-fields

话虽如此。在性能方面,"switch" 语句的性能可能优于 "if/else" 条件。

但是,在您的情况下,您不会获得或损失性能或效率。

"switch" 语句可能给出的性能类型,必须考虑到可能需要高效率的更具体的边缘情况,例如渲染循环,或具有效率的算法重点。

对于您的用例,使用 "if/else" 条件是没有效率问题的好解决方案。

【讨论】:

  • 我在一个 switch 语句中有 20 多个案例。升级到 Android Studio 4.1 后,我今天才收到此 lint 警告。然而,这显然是 8 岁以上?
  • @Chaitanya Karmarkar Google 可以自行决定在每个 Android Studio 版本中定义新的 lint 警告,即使在这种情况下这是一个已经存在多年的问题:issuetracker.google.com/issues/159878591#comment3跨度>
  • 如果这是关于 ADT 14 的旧错误,为什么该错误会提到 Gradle Plugin 5?
  • 据我了解,ADT 14 停止使用 final 作为标识符,但是,当 Google 切换到 Android Studio 时,gradle 插件又回到使用 final 作为标识符,但是在 Gradle 插件 5 中他们计划更改它再次成为非最终的。这意味着 Java switch 语句将在 Gradle 5 中中断,这就是新的 lint 警告的原因。
  • 长期以来,Google 都在说服开发者使用 switch case 而不是 if!现在它突然建议反之亦然。这对我来说很有趣。
猜你喜欢
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多