[JAVA] En cas d'exception, l'attente du débogueur est réaffiche et il y a un problème d'exception Logcat qui ne peut pas être vu.

・ Bien que le problème n'ait pas été résolu, la cause a été identifiée, veuillez donc vous y référer si vous le souhaitez. ・ Parce qu'il a été rédigé par une personne qui n'a pas beaucoup d'expérience dans le développement d'applications, veuillez vous y référer après avoir soigneusement considéré qu'il peut être incorrect.

Lorsqu'une exception s'est produite dans le studio Android, l'attente du débogueur est apparue, et même si j'essayais de voir l'exception à ce moment-là, Logcat a disparu et je ne pouvais pas la voir.

Cette attente du débogueur est effectuée chaque fois que vous démarrez le débogage.

Il y a des moments où ce n'est pas le moment de sortir, alors quand j'ai essayé un peu dans quelles conditions il est sorti, il est sorti dans les conditions suivantes. L'exception est

  int[] i = null;
  for(int a:i){
  }

J'ai accédé au tableau null int avec l'extension pour et j'ai provoqué une RuntimeException.

Puisqu'il y a des moments où Logcat peut être vu et des moments où il ne peut pas être vu, lorsque j'ai essayé de voir dans quelles conditions il était visible et dans quelles conditions il n'était pas visible, les conditions étaient les suivantes. supposition

    1. Créer 3 activités (Activity1, Activity2, Activity3)
  1. Créez des boutons dans Activity1 et Activity2 pour que l'écran change lorsque vous appuyez sur le bouton (Activity1 → Activity2 → Activity3).

Lorsqu'elle est visible: une exception se produit dans Activity1 et Activity2. Lorsqu'il n'est pas visible: une exception se produit dans Activity3. Voici la source spécifique (un modèle dans lequel l'attente du débogueur apparaît et Logcat ne peut pas être vu).

Activity1

public class Activity1 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConstraintLayout constraintLayout =findViewById(R.id.baseLayout);

        Button button = new Button(this);
        button.setText("Au 2ème");
        button.setOnClickListener((v)->{
            Intent intent = new Intent(this,Activity2.class);
            startActivity(intent);
        });
        constraintLayout.addView(button);
    }
}

Activity2

public class Activity2 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ConstraintLayout constraintLayout =findViewById(R.id.baseLayout);

        Button button = new Button(this);
        button.setText("Au 3ème");
        button.setOnClickListener((v)->{
            Intent intent = new Intent(this,Activity3.class);
            startActivity(intent);
        });
        constraintLayout.addView(button);
    }
}

Activitiy3

public class Activity3 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int[] i = null;
        for(int a:i){//Je lève une exception ici
        }
    }
}

Si vous apportez cette exception à Activity1 et Activity2, l'attente du débogueur n'apparaîtra pas et vous pourrez voir Logcat. (La source est omise car elle devient redondante)

Et, l'exception est que l'attente du débogueur apparaît, et après cela, l'application est relancée.

Je cherchais seulement à attendre le débogueur, mais quand j'ai regardé de près, lorsqu'une exception s'est produite dans Activity3, elle est tombée et l'écran d'Activity1 a été relancé.

Par conséquent, lorsque je suis arrivé à l'endroit où "Il y a un problème avec le redémarrage de cette application" et que j'ai recherché "redémarrages d'exceptions android" etc., ici de Terratail / questions / 28406), je suis arrivé à la question

  1. Lorsqu'une exception se produit, Process disparaît et l'application se termine, mais Task survit.
  1. L'activité dans laquelle l'exception s'est produite disparaît de la tâche, et les activités restantes sont ouvertes selon l'ordre d'enregistrement de la tâche.

J'ai pensé que cela pourrait être lié à cela. Et lorsqu'une exception se produit dans Activity1, "Activity disparaît de Task", donc je comprends qu'il n'y a pas d'activité et que l'application plante, mais je me demande ce que ça fait de planter même si je mets une exception dans Activity2.

Puis, après être allé plus loin, j'ai découvert que si une exception se produit, l'activité de l'appelant est également détruite, et tous les points sont arrivés au point de ce temps.

Résumé J'expliquerai en ajoutant une autre activité (Activity4). Une exception se produit dans Activity1 → L'application se termine Une exception se produit dans Activity2 → App se termine (l'appelant et l'appelé sont ignorés) Une exception se produit dans Activity3 → Aller à Activity1 (l'appelant et l'appelé sont ignorés) Une exception se produit dans Activity4 → Aller à Activity2 (l'appelant et l'appelé sont ignorés)

Et j'ai compris la cause, mais j'ai déjà m (_ _) m en bas pour savoir comment y faire face, alors je vais le résumer sous forme de mémorandum.

S'il y a une chance, je peux m'en occuper jusqu'à ce que je puisse voir Logcat fermement sans redémarrer l'application.

Recommended Posts

En cas d'exception, l'attente du débogueur est réaffiche et il y a un problème d'exception Logcat qui ne peut pas être vu.
Lorsque tomcat est démarré dans eclipse, "ClassNotFoundException" s'affiche et ne peut pas être démarré.
Le paramètre strong est vrai, mais pour une raison quelconque, il ne peut pas être enregistré dans le tableau.