105 votes

Comment résoudre l'avertissement "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements" ?

 @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;
    }
}

pour ce code, l'avertissement "Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements" apparaît. Quelle est la solution possible ? Si je change ce code en :

 @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();
    }
}

L'avertissement va ; mais l'instruction switch est plus performante que l'instruction if. Quelle est donc la solution possible pour travailler efficacement et plus rapidement ?

0 votes

0 votes

Aucune correction rapide n'apparaît dans Android studio 4.1 lorsque je survole le code qui affiche cet avertissement.

0 votes

Définir les finales locales et remplacer les cas de commutation : final int id1 = R.id.legalInformationLL ; case id1 :

110voto

PerracoLabs Points 5210

Le problème se pose car depuis ADT 14, les identifiants de ressources ne sont plus définitifs.

Voir le lien suivant, où Google indique d'utiliser plutôt "si/seulement" comme alternative :

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

Ceci étant dit, en matière de performances, "interrupteur" peuvent être plus performants que les "si/seulement" conditions.

Cependant, dans votre cas, vous ne gagnez ni ne perdez en performance ou en efficacité.

Le type de performance qu'un "interrupteur" doit être prise en considération pour des cas plus spécifiques qui peuvent exiger une grande efficacité, comme les boucles de rendu ou les algorithmes axés sur l'efficacité.

Pour votre cas d'utilisation, l'utilisation d'un "si/seulement" La condition est une bonne solution sans problème d'efficacité.

0 votes

Oui, c'est une bonne solution possible pour cet avertissement, mais existe-t-il une meilleure solution alternative pour cet avertissement ?

69 votes

J'ai plus de 20 cas dans une déclaration d'échange. Je n'ai reçu cet avertissement qu'aujourd'hui, après la mise à jour vers Android Studio 4.1. Pourtant, cela date apparemment de plus de 8 ans ?

0 votes

La même chose m'est arrivée, pourquoi la nouvelle mise à jour donne cet avertissement, c'est la vraie question je pense, car Android Studio 4.0 ne donne pas cet avertissement et tout fonctionne bien au moment du test. La question est de savoir si quelque chose sort du cercueil qui veut la paix après plus de 8 ans peut-être :) ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X