1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. Andro-medanebel, 19.04.2011 #1
    Andro-medanebel

    Andro-medanebel Threadstarter Android-Hilfe.de Mitglied

    Mein Grafikaufbau und meine Programmlogik befindet sich
    in onSizeChanged (erst in onSizeChanged sind Breite und
    Höhe bekannnt und diese lese ich aus).

    Code:
    @Override
    protected void onSizeChanged(int w, int h, int ow, int oh)
    {
     MeinGanzesProgramm();
    }
    
    void  MeinGanzesProgramm() 
    {
     ...
     if (neustart==true) {MeinGanzesProgramm();}
    }
    
    Beim Drehen des Displays wird onSizeChanged aufgerufen
    und MeinGanzesProgramm() erneut aufgerufen,
    was einem Neustart und damit auch Neuaufbau der Grafik
    entspricht, was auch so gewollt ist.

    Zusätzlich soll mein Programm eine Menü-Option
    "Neustart" bekommen, wo ich dann auch
    MeinGanzesProgramm() aufrufen will.

    Allerdings frage ich mich, ob der Neustart durch Rekursion
    problematisch ist, da sich evtl. ein Stapel von Rücksprungadressen
    aufbaut und es bei sehr vielen rekursiven Aufrufen ein Stapelüberlauf
    geben könnte.

    Ist meine Sorge berechtigt?

    Wenn ja:
    Ist es möglich, die letzte Rücksprungadresse zu löschen,
    bevor MeinGanzesProgramm() erneut aufgerufen wird,
    so dass kein Stapel von Rücksprungadressen entsteht?
     
  2. v Ralle v, 19.04.2011 #2
    v Ralle v

    v Ralle v Android-Lexikon

    Naja, so wie ich das verstehe, sollte MeinGanzesProgramm(); nur 2 mal aufgerufen werden. Denn wenn du über der if Bedingung die Variable neustart nicht veränderst, kann es zu einer Endlosschleife kommen.

    Das ganz Konstrukt ist merkwürdig gebaut. Sollte es bei nur ein paar Aufrufen bleiben, ist es sicher zu verwenden.
     
  3. SeraphimSerapis, 20.04.2011 #3
    SeraphimSerapis

    SeraphimSerapis Android-Guru

    Ich würd das jetzt auch noch nicht als Rekursion bezeichnen.
    Zwar ruft die Methode sich selbst wieder auf, aber vermutlich nicht mehrere x-male zum Berechnen eines Werts oder ähnliches ;)

    Ich nutze sowas auch hin und wieder, wobei man dann immer schauen sollte, dass die Funktion nicht zu oft läuft.