Activity finish startet Activity wieder ...

T

Tom299

Stammgast
122
Hallo,

ich hab seit einer Woche ein ganz komisches Phänomen und bin heute halbwegs dahintergekommen. Kanns mir jedoch nicht erklären. Und ne richtige Lösung hab ich auch noch nicht gefunden.

Grob gesagt, ich frage den BackButton (onKeyDown ...) ab und führe dort eine Plausi durch (Werte auf Gültigkeit überprüfen).
Sollte die Plausi fehlschlagen, muß der Anwender ein Bild als Beweis machen. Dazu erstelle ich einen Dialog, in dem er wählen kann, ob er das Bild machen will oder abbrechen:
Code:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, INTENT_CAPTURE_IMAGE_PLAUSI);

Und jetzt kommt das kuriose: in onActivityResult bekomm ich das Bild, was ich speichere und versuche dort, die Activity zu beenden -> MeineActivity.this.finish

Was passiert? Die Activity wird beendet, aber es wird direkt eine 2. Activity (die gleiche) wieder gestartet. Aber warum?

Dann hab ich das ganze nochmal genau angeschaut (Activity Lifecycle) und gesehen, daß zuerst onActivityResult, danach erst OnResume ausgeführt wird.

Ok, hab ich also in onActivityResult ein Flag gesetzt (doFinish) und in onResume frag ich das ab, und wenn true dann MeineActivity.this.finish.

Und was passiert wieder? Genau, die Activity wird beendet und gleich wieder neu gestartet und ich weiß nicht wieso.

Ziel ist es, daß nach dem Bild machen die Daten gespeichert werden und die Activity beendet wird -> BackButton wurde ja deswegen schon benutzt.

Das einzige, was ich jetzt hinbekommen habe ist, mein Flag im onKeyDown abzufragen. Das bedeutet, nach dem Bild machen lande ich wieder in meiner Activity und muß nochmals Back drücken, dort kann ich dann wie erwartet die Activity mit MeineActivity.this.finish bzw. finish beenden. Aber warum funktioniert das hier und nicht in onResume oder in onActivityResult? Ich kapier das einfach nicht ...
 
Übrigens: wenn ich nen anderen Plausi-Check einbaue, der einfach irgendwelche Eingaben prüft, also kein Intent startet, dann kann ich auch an jeder Stelle die Activity verlassen mit MeineActivity.this.finish. ...
 
Neuste Erkenntnis: Wenn ich das Bild mache (Querformat) und vor dem Speichern das Handy ins Hochformat drehe (meine Anwendung läuft nur im Hochformat) dann klappt das Beenden so wie ich es erwarte. Speichere ich aber das Bild im Querformat, wird meine Activity beendet und gleich wieder gestartet. Das ist doch ein schlechter Witz, oder? ...
 
Deine Activity wird zuerst in Landscape gestartet und dann eigentlich beendet und in Portrait neu erstellt.
Du beendest also die Activity, die sowieso beendet werden soll.
 
Nein, all meine Activities werden explizit in Portrait gestartet, nie in Landscape.
Code:
android:screenOrientation="portrait"

Das einzige, was in Landscape gestartet wird, ist das Kamera-Intent. Meine Activity/ies danach sind wieder im Portrait. Das ist ja das komische, meine Activities werden NIE gedreht bzw. sind nicht drehbar.

Habe zum Testen mal
Code:
android:configChanges="orientation|keyboardHidden"
eingefügt und im Code überschrieben:
Code:
@Override
public void onConfigurationChanged(Configuration newConfig) {
	super.onConfigurationChanged(newConfig);
	System.out.println("### onConfigurationChanged");
}

Die Methode wird aber nie aufgerufen ...
 
Tom299 schrieb:
Nein, all meine Activities werden explizit in Portrait gestartet, nie in Landscape.
Code:
android:screenOrientation="portrait"
Das macht nichts. Du kannst eine Activity auch mit screenOrientation="landscape" starten und wenn der Lockscreen Portrait ist wird sie beim entsperren kurz in portrait erstellt, dann direkt gekillt und wieder auf landscape umgestellt.



Habe zum Testen mal
Code:
android:configChanges="orientation|keyboardHidden"
eingefügt und im Code überschrieben:
Code:
@Override
public void onConfigurationChanged(Configuration newConfig) {
	super.onConfigurationChanged(newConfig);
	System.out.println("### onConfigurationChanged");
}

Die Methode wird aber nie aufgerufen ...
Ich hätte jetzt erwartet, dass das hilft...
 
Ich habe jetzt mal den Versuch gemacht und meine Activity beendet bevor ich das Kamera-Intent starte. Wenn ich von der Kamera zurückkomme wird meine Activity aber nicht mehr erstellt, sondern ich lande in der Activity davor. Hätte jetzt aber erwartet, daß meine Activity wieder erstellt wird. Irgendwas ist da wirklich komisch ...
 

Ähnliche Themen

M
  • maksimilian
Antworten
15
Aufrufe
1.695
maksimilian
M
M
Antworten
8
Aufrufe
952
deek
D
M
  • maksimilian
Antworten
5
Aufrufe
857
maksimilian
M
Zurück
Oben Unten