German android life cycle Verständnis

psciga

Active Member
Licensed User
Longtime User
Hallo zusammen,

meine erste App habe ich mit nur einer Activity und mehreren Panels realisiert. Auf Grund verschiedener Forenbeiträge versuche ich, mein neues Projekt nun statt dessen mit mehreren Activities zu realisieren und stehe vor der hier schön öfter diskutierten Frage, wie es sich mit dem Lifecycle verhält.

Um mir das ein wenig zu veranschaulichen, habe ich ein Beispiel mit drei Activities gebastelt. Aus Activity1 rufe ich mit einem Button CallSubDelayed2(Activity2,"Activity_Create",True) auf und habe mal in die einzelnen Subs (Activity_Create, Activity_Resume und Activity_Pause) einfach nur ein entsprechendes ToastMessageShow() eingetragen. Folgendes passierte:

Durch Aufruf (per Button) von Activity2 aus Activity1 (main) wird Activity_Create in Activity2 gestartet. Dann läuft das Prgramm in Activity_Resume und anschließend wieder in Activity_Create. Hier wartet Activity2 auf weitere Eingaben.

Durch Aufruf (per Button) von Activity3 aus Activity2 wird zuerst Activity_Pause in Activity2 aufgerufen. Anschließend wird Activity3 gestartet. Hier ist der Ablauf wieder wie in Activity2, nämlich Create --> Resume --> Create.

Verlasse ich Activity 3 per Android zurück Button wird zuerst Activity_Pause in Activity3 abgearbeitet und dann wieder Activity2 geladen und Activity_Resume in Activity2 gestartet. Analog dazu verhält es sich, wenn ich Activity2 per Android zurück Button verlasse.

Da ein Bild manchmal mehr sagt als der viel Text hab ich mal ein Schema angehängt.

Nun meine Frage, habe ich das richtig verstanden???

Vielen Dank im Voraus!

Peter
 

Attachments

  • lifecycle.jpg
    lifecycle.jpg
    54.7 KB · Views: 270

MaFu

Well-Known Member
Licensed User
Longtime User
Nein, hast Du nicht.

Der korrekte Aufruf einer Activity erfolgt über StartActivity(activityName).
Dann stimmt auch der Funktionsablauf Activity_Create() -> Activity_Resume().

Die CallSubDelayed... Funktionen sind dafür da, beliebige Funktionen in anderen Activities aufzurufen, wobei dann das Activity automatisch gestartet wird.
Dadurch ergibt sich auch Dein Mehrfachaufruf:
CallSubDelayed2() startet erst mal die Activity2, was natürlich die aufeinanderfolgenden Aufrufe von Activity_Create() und Activity_Resume() nach sich zieht. Anschließend wird Activity_Create(), weil ja von Dir in CallSubDelayed so angegeben, nochmal aufgerufen. Das kann, je nach Programmcode in den beiden Funktionen, ganz extrem nach hinten losgehen.

Also Merken: ein normaler Aufruf einer Activity erfolgt über "StartActivity".
 

MaFu

Well-Known Member
Licensed User
Longtime User
Noch als Ergänzung:
Activity_Create, Activity_Resume und Activity_Pause sind Ereignisfunktionen. Diese werden vom System automatisch aufgerufen. Ereignisfunktionen ruft man im Programm (im Normalfall) niemals selbst auf.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Activity_Resume wird immer aufgerufen.
Wenn eine Activity erstellt wird, ist die Aufrufreihenfolge _Create (mit FirstTime True beim allerersten Aufruf und False bei den folgenden) und anschließend _Resume. Ist das Activity schon vorhanden und wird nur wieder in den Vordergrund geholt (z.B. beim Rüchsprung von Activity2 nach Activity1) dann erfolgt nur der Aufruf von _Resume.
 
Top