web-dev-qa-db-fra.com

Android 4.4.2 - Java.lang.RuntimeException: arrêt de l'activité non repris

Je reçois cette exception sur un appareil 4.4.2. Non reproductible sur Android 4.3 appareil ou moins.

Le programme d'installation est une activité à domicile (sous-classe de support ActionBarActivity). L'activité à domicile vérifie un indicateur booléen et, si elle est vraie, lance une activité d'écran de démarrage (oui, idéalement, le splash vient avant l'activité à domicile, mais supposons que je ne puisse pas le changer pour qu'il fonctionne de cette façon pour l'instant).

L'écran de démarrage est lancé avec startActivityForResult, il télécharge certaines options de configuration depuis le serveur, puis termine et renvoie le résultat à l'activité d'accueil.

Ce qui est étrange, c'est que cela fonctionne bien sur les versions 4.3 et inférieures, mais sur les appareils 4.4, j'obtiens l'exception ci-dessus (trace complète de la pile):

02-21 13:36:16.733  24409-24409/test.player E/ActivityThread﹕ Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity}
    Java.lang.RuntimeException: Performing stop of activity that is not resumed: {test.player/test.ui.actvities.HomeActivity}
            at Android.app.ActivityThread.performStopActivityInner(ActivityThread.Java:3147)
            at Android.app.ActivityThread.handleStopActivity(ActivityThread.Java:3234)
            at Android.app.ActivityThread.access$1100(ActivityThread.Java:135)
            at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1223)
            at Android.os.Handler.dispatchMessage(Handler.Java:102)
            at Android.os.Looper.loop(Looper.Java:136)
            at Android.app.ActivityThread.main(ActivityThread.Java:5017)
            at Java.lang.reflect.Method.invokeNative(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:515)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:779)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:595)
            at dalvik.system.NativeStart.main(Native Method)

Sur la base de ce qui précède, il semble que l'onStop (car je lance l'activité de démarrage sur onCreate) soit appelé avant onResume pour l'activité d'accueil.

Pourquoi cela pose-t-il maintenant des problèmes dans 4.4.x?

37
user3072558

Cela ne me semble pas juste. L'activité splash serait désormais la principale activité de la pile, de sorte que la méthode de cycle de vie HomeActivity onStop serait éventuellement appelée. Par coïncidence, j'ai déplacé l'appel startActivity pour l'activité de démarrage de onCreate vers onResume dans le HomeActivity, et l'erreur disparaît.

20
user3072558

Ce problème sera toujours présent sur tous les téléphones haut de gamme avec Android 4.4.2 et supérieur, y compris NEXUS 5 et Samsumg s4, car onResume est appelé mais il est toujours en phase d'animation. Donc, si vous essayez pour démarrer une activité dans onResume, le problème sera répliqué.

Mettez votre activité de commutation dans une méthode retardée de gestionnaire.

    Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
              //Start another Activity Here

            default:
                break;
        }
        return false;
    }
});

Et dans onResume, appelez cela.

 handler.sendEmptyMessageDelayed(1, 1000);

À ce moment-là, vous pouvez montrer le chargeur ou quelque chose ou bloquer l'interaction de l'utilisateur

10
sheetal

J'obtenais cette exception même lorsque j'utilisais onResume(), donc j'ai fini par remplacer onPostResume() et démarrer l'activité à partir de là, et l'exception a disparu. Je ne sais pas si c'est une solution idéale, mais quand même ...

4
Deinlandel

Appelez simplement la super méthode onResume avant de lancer la nouvelle activité:

super.onResume();
3
Chris623