2012-04-12 33 views
0

Ich habe 2 Aktivitäten, A und B.Aktivität kann nicht eine andere Aktivität stoppen und dann selbst

A ruft B mit der Absicht und Anforderungscode -

startActivityForResult(i,123); 

... später I A B will stoppen und dann sich selbst, so in AI

finishActivity(123); 
finish(); // finish itself 
tat

... aber B hört nicht auf! ABER wenn ich Breakpoints bei allen onStop's und onDestroys setze und im Debugger durchtrete funktioniert alles einwandfrei und beide Activities gehen weg. (Dies legt nahe, einen Zeitpunkt oder Race-Bedingung)

Allerdings, wenn ich einen Kommentar-out A kommt zum Abschluss() ...

finishActivity(123); 
// finish(); // finish itself 

B tut Finish aber A nicht, weil seine Oberfläche genommen wurde. Was ist der richtige Weg, um eine Aktivität zu beenden, die sie erstellt hat, und sich dann zu beenden?

Vielen Dank im Voraus.

+0

Wenn Sie B für ein Ergebnis starten, warum möchten Sie nicht, dass es sich selbst beendet und das Ergebnis zurück an A sendet? Wenn Sie das Timing richtig verstanden haben, können Sie runnable und postDelayed verwenden, um das finsh() um eine halbe Sekunde oder was auch immer es benötigt – FoamyGuy

+0

zu verzögern anstatt finishActivity (123) von A zu verwenden. Versuchen Sie, eine Instanz von B zu speichern (nicht empfohlen, Speicher) und rufen Sie eine Methode in B auf, die sich selbst schließt, so dass Sie das onActivityResult mit dem Namen – L7ColWinters

+0

erhalten. Dies ist für eine industrielle Anwendung, bei der das Android-Gerät eine Fernbedienung für einen PC-basierten industriellen Prozess ist. Nachrichten auf dem PC werden sowohl auf dem PC als auch auf dem Android-Gerät angezeigt, und der Benutzer kann mit ihnen interagieren oder sie entlassen. Der Fall, den ich beschreibe, ist, wo die Nachricht auf dem PC behandelt wurde, so dass das Android-Gerät sie ohne Benutzerinteraktion abweisen muss. – user316117

Antwort

3

sehen, ob das funktioniert:

finishActivity(123); 
runOnUiThread(new Runnable() { 
    public void run() { 
     finish(); 
    } 
}); 

Der Grund, warum ich dies vorschlagen, ist, dass ich den Anruf an finish() denken nicht finishActivity(123) eine Chance zu geben, seine Sache zu tun. Durch Aufruf von runOnUiThread wird der Anruf an finish() bei der nächsten Schleife durch die UI-Nachrichtenwarteschlange stattfinden.

+0

BINGO !! Du bist Mann! – user316117

Verwandte Themen