2014-02-22 10 views
36

Ich bekomme diese Ausnahme auf einem 4.4.2-Gerät. Nicht reproduzierbar auf Android 4.3-Geräten oder niedriger.Android 4.4.2 - java.lang.RuntimeException: Ausführen von Aktivitäten, die nicht fortgesetzt werden

Setup ist ich habe eine Home-Aktivität (Unterklasse der Unterstützung ActionBarActivity). Die Home-Aktivität überprüft ein boolesches Flag und wenn dies zutrifft, startet eine Splash-Screen-Aktivität (ja, im Idealfall kommt das Splash vor der Home-Aktivität, aber nehmen wir an, ich kann es nicht ändern, um so zu arbeiten).

Der Begrüßungsbildschirm wird mit startActivityForResult gestartet, lädt einige Konfigurationsoptionen vom Server herunter, beendet dann und gibt das Ergebnis an die Home-Aktivität zurück.

Seltsame ist dies auf 4.3 funktioniert gut und unten, aber auf 4.4 Geräte, erhalte ich die oben genannte Ausnahme (full-Stack-Trace):

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) 

Basierend auf den oben sieht es aus wie OnStop (weil ich Starten Sie die Splash-Aktivität auf OnCreate) wird vor OnResume für die Home-Aktivität aufgerufen.

Warum verursacht das jetzt Probleme in 4.4.x?

+0

Geht es um "Einstellungen/Entwickleroptionen/Aktivitäten nicht beibehalten"? Ist diese Option bei 4.4.2 Gerät ausgewählt und nicht bei einem anderen Gerät ausgewählt? – Devrim

+0

Nein, diese Option ist auf beiden Geräten nicht aktiviert. – user3072558

+0

endet Ihre Splash-Aktivität nach dem Herunterladen? Wie gehst du zurück zu 'HomeActivity'? Was ist Splash Aktivität, ist es ein Dialog? – mangusta

Antwort

20

Das scheint mir nicht richtig. Die Splash-Aktivität wäre jetzt die oberste Aktivität im Stapel, sodass die OnStop-Lebenszyklusmethode HomeActivity schließlich aufgerufen würde. Zufälligerweise habe ich den startActivity Aufruf für die Splash-Aktivität von onCreate zu onResume in HomeActivity verschoben, und der Fehler verschwindet.

+1

In meinem Fall kommt immer noch das Problem onResume, wenn ich eine andere Aktivität starte. Was ich tun musste, war den Start der Aktivität mit ca. 1000 Millisekunden auf onResume zu verzögern. Gibt es einen besseren Weg ??? – sheetal

10

Das Problem wird immer noch auf allen HighEnd-Handys mit 4.4.2 und höher einschließlich NEXUS 5, Samsumg s4 da OnResume wird aufgerufen, aber immer noch in der Animation Bühne.So wenn Sie versuchen, eine Aktivität in OnResume das Problem zu starten wird repliziert.

Legen Sie Ihre Switching-Aktivität in eine verzögerte Methode des Handlers.

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

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

Und in onResume dieses nennen.

handler.sendEmptyMessageDelayed(1, 1000); 

Zu dieser Zeit Sie Loader oder etwas oder Block Interaktion mit dem Benutzer

4

Rufen Sie die onResume Super Methode, bevor die neue Aktivität starten zeigen können: sogar

super.onResume(); 
+0

Was passiert, wenn ich die Methode onResume() nicht implementiert habe? –

+1

Dann erben Sie die super.onResume() als Ihre onResume() automatisch – nadavge

3

Ich war immer diese Ausnahme, wenn mit onResume(), so endete ich oben onPostResume() und Beginn der Aktivität von dort, und die Ausnahme ist vorbei. Nicht sicher, ob dies eine ideale Lösung ist, aber immer noch ...

Verwandte Themen