1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Activity finish startet Activity wieder ...

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Tom299, 02.03.2012.

  1. Tom299, 02.03.2012 #1
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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 ...
     
  2. Tom299, 02.03.2012 #2
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Ü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. ...
     
  3. Tom299, 02.03.2012 #3
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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? ...
     
  4. the_alien, 02.03.2012 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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.
     
  5. Tom299, 02.03.2012 #5
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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 ...
     
  6. the_alien, 02.03.2012 #6
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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.



    Ich hätte jetzt erwartet, dass das hilft...
     
  7. Tom299, 02.03.2012 #7
    Tom299

    Tom299 Threadstarter Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    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 ...
     

Diese Seite empfehlen