KIO
Kreative Ideen online
Der Stand einer Tätigkeit

Der Stand einer Tätigkeit

Wenn Android eine Aktivität erstellt und zerstört, wird die Aktivität von gestartet, zum Ausführen und zerstört.

Eine Aktivität wird ausgeführt, wenn sie sich im Vordergrund des Bildschirms befindet.
onCreate() wird aufgerufen, wenn die Aktivität zum ersten Mal erstellt wird, und hier führen Sie Ihre normale Aktivitätseinrichtung durch.
onDestroy() wird aufgerufen, kurz bevor Ihre Aktivität zerstört wird.

Der Hauptzustand einer Aktivität ist, wenn sie ausgeführt oder aktiv ist. Eine Aktivität wird ausgeführt, wenn sie sich im Vordergrund des Bildschirms befindet, den Fokus hat und der Benutzer mit ihr interagieren kann. Die Aktivität verbringt den größten Teil ihres Lebens in diesem Zustand. Eine Aktivität beginnt zu laufen, nachdem sie gestartet wurde, und am Ende ihres Lebens wird die Aktivität zerstört.

  • Aktivität gestart
    etDas Aktivitätsobjekt wurde erstellt, aber noch nicht ausgeführt
  • Aktivität runningIhr
    e Aktivität verbringt den größten Teil ihres Lebens hier
  • Aktivität zerstörtAn
    diesem Punkt ist Ihre Aktivität nicht mehr vorhanden.

Wenn eine Aktivität von der Start- zu der Zerstörung sausiert wird, löst sie wichtige Aktivitätslebenszyklusmethoden a
us:onCreate
()a
ndonDestroy()

Dies sind Lebenszyklusmethoden, die Ihre Aktivität erbt und die Sie in der erforderlichen Weise überschreiben können.

Die onCreate()-Methode wird sofort aufgerufen, nachdem Ihre Aktivität gestartet wurde. Auf dieser Methode führen Sie alle Ihre normalen Aktivitätseinstellungen durch, z. B. setContentView(). Sie sollten diese Methode immer überschreiben. Wenn Sie es nicht überschreiben, können Sie Android nicht sagen, welches Layout Ihre Aktivität verwenden soll.

Die onDestroy()-Methode ist der letzte Aufruf, den Sie erhalten, bevor die Acctivity zerstört wird. Es gibt eine Reihe von Situationen, in denen eine Aktivität entroyed werden kann – zum Beispiel, wenn sie zum Abschluss aufgefordert wurde, wenn die Aktivität aufgrund einer Änderung der Gerätekonfiguration neu erstellt wird, oder wenn Android beschlossen hat, die Aktivität zu zerstören, um Platz zu sparen.

Der Aktivitätslebenszyklus: von reate bis destroy

Hier ist ein zu vereinfachter Überblick über den Aktivitätslebenszyklus von der Geburt bis zum Tod.

Aktivität lauched

onCreate()

Aktivbetrieb

onDestroy()

Aktivität zerstört

  1. Die Aktivität wird gestartet. Da
    s Aktivitätsobjekt wird erstellt, und der Konstruktor wird ausgeführt.
  2. Die onCreate()-Methode wird sofort ausgeführt, nachdem die Aktivität gestartet wurde.
    Die onCreate()-Methode ist der Ort, an dem der Initialisierungscode verwendet werden soll, da diese Methode immer aufgerufen wird, nachdem die Aktivität gestartet wurde, aber bevor sie ausgeführt wird.
  3. Eine Aktivität wird ausgeführt, wenn sie im Vordergrund sichtbar ist und der Benutzer mit ihr interagieren kann.
    Hier verbringt eine Aktivität den größten Teil ihres Lebens.
  4. Das onDestroy() ethod läuft unmittelbar vor der Zerstörung der Aktivität. Mit der o
    nDestroy()-Methode können Sie eine endgültige Bereinigung durchführen, z. B. das Freilassen von Ressourcen.
  5. Nachdem die onDestroy()-Methode ausgeführt wurde, wird die Aktivität zerstö
    rt. Die Aktivität hört auf zu exist
    ieren. Hinweis: Wenn Ihr Gerät extrem wenig Arbeitsspeicher hat, wird onDestroy() möglicherweise nicht aufgerufen, bevor die Aktivität

Die Methoden onCreate() und onDestroy() sind zwei der Aktivitätslebenszyklusmethoden. Woher kommen diese Methoden?

Ihre Aktivität erbt die Lebenszyklusmethoden

Ihr activy erweitert die Android.app.Activity-Klasse. Diese Klasse ermöglicht Ihrer Aktivität den Zugriff auf die Android-Lebenszyklusmethoden. Hier ist ein Diagramm, das die Klassenhierarchie zeigt:

  1. Context
    Context abstract class(a
    ndroid.content.Context)Ein
    e Schnittstelle zu globalen Informationen über die Anwendungsumgebung. Er
    möglicht den Zugriff auf Anwendungsressourcen, Klassen und Vorgänge.
  2. ContextWprapper-Klass
    e(android.content.ContextWrapper)E
    ine Proxyimplementierung für den Kontext.
  3. ContextThemeWrapper class(a
    ndroid.view.ContextThemeWrapper)Ermögl
    icht es Ihnen, das Design von dem, was im ContextWrapper ist, zu ändern.
  4. Aktivitätsklas
    se(android.app.Activity
    )Die Actitvity-Klasse implementiert Standardversionen der Lebenszyklusmethoden. Es definiert auch Methoden wie findViewById(Int) und setContentView(View).
  5. YourActivity class(com
    .mydomain.foo)Die meis
    ten Verhaltensweisen Ihrer Aktivität werden von übergeordneten Methoden verarbeitet, die Ihre Aktivität erbt. Alles, was Sie tun, ist voerride die Methoden, die Sie brauchen.

Ein Beispiel:

Speichern Sie den aktuellen Status….

Wenn der Bildschirm von Querformat zu Hochformat wechselt, wird die Aktivität zerstört und neu erstellt, was bedeutet, dass die von der Aktivität verwendete lokale Variable verloren geht. Wie dow kommen wir also um diese?

Der beste Weg, um mit Konfigurationsänderungen umzugehen, besteht darin, den aktuellen Status der Aktivität zu speichern und ihn dann in der onCreate()-Methode der Aktivität zu reeinstae.

Um den Status der Aktivität zu speichern, müssen Sie die onSaveInstanceState()-Methode implementieren. Diese Methode wird aufgerufen, bevor die Aktivität zerstört wird, was bedeutet, dass Sie die Möglichkeit erhalten, alle Werte zu speichern, die Sie beibehalten möchten, bevor sie verloren gehen.

Die onSaveInstanceState()-Methode verwendet einen Parameter …

Bundel

Mit einem Bundle können Sie verschiedene Datentypen in einem einzelnen Objekt zusammenfü
hren:public void onSaveInstanceState(Bundle savedInstanceState)

Die onCreate()-Methode wird das Bundle als Parameter übergeben. Das bedeutet, dass, wenn Sie die Werte von Variablen zum Bundle hinzufügen, die onCreate()-Methode in der Lage sein wird, sie aufzunehmen, wenn die Aktivität neu erstellt wird. Dazu verwenden Sie Bundle-Methoden, um dem Bundle Name/Wert-Paare hinzuzufügen. Diese Methoden haben folgende Form:

bundle.put*("Name",Wert)

wobei Bundle der Name des Bundles ist, * der Typ des Werts, den Sie speichern möchten, und Name und Wert sind der Name und der Wert der Daten. Um dem Bundle beispielsweise den Wert a hinzuzufügen, verwenden
Sie'bundle.putInt("seconds", secons);

Sie können mehrere Name/Wert-Paare von Daten im Bundle speichern.

Speichern Sie die Werte der Sekunden und die Ausführung von Variablen im Bundle.
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
         savedInstanceState.putInt("Sekunden", Sekunden);
         sevedInstanceState.putBoolean("running", running);
}

Nachdem Sie Variablenwerte im Bundle gespeichert haben, können Sie sie in Ihrer onCreate()-Methode verwenden.

.. stellen Sie dann den Status in onCreate() wieder her

Wie wir zuvor vorfinden, nimmt die onCreate()-Methode einen Parameter, ein Bundle. Wenn die Aktivität von Grund auf neu erstellt wird, ist dieser Parameter null. Wenn jedoch die Aktivität neu erstellt wird und zuvor onSaveInstanceState() aufruft wurde, wird das von onSaveInstanceState() verwendete Bundle-Objekt an die Aktivität übergeben:

geschützte void onCreate(Bundle savedInstanceState)

Sie können Werte aus Bundle abrufen, indem Sie Methoden des Formulars verwenden:

Verwenden Sie anstelle von *Int,String usw., um den Datentyp anzugeben, den Sie get.bundle.
get*("name") wünschen.

wobei Bundle der Name des Bundles ist, * der Typ des Werts, den Sie abrufen möchten, und Name ist der Name des namens/Wertpaares, das Sie angegeben haben. Als Beispiel für den Sekundenwert aus dem Bundle würden Sie verwenden:

int seconds = bundle.getInt("Sekunden");

Zusammengenommen, ist hier, wie eine onCreate()-Methode aussehen würde.

geschützte void onCreate(Bundle savedInstanceState)
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stopwatch);
    if(savedInstanceState != null)
       sekunden = savedInstancesState.getInt("Sekunden");
       running = savedInstanceState.getBoolean("running");
    }
    runTimer();
}  

fortgeschritten….

Das Leben einer Aktivität hat mehr zu schaffen und zu zerstören

Bisher haben wir uns die Erstellung und Zerstörung von Teilen des Aktivitätslebenszyklus (und ein wenig dazwischen) angesehen, und Sie haben gesehen, wie Sie mit Konfigurationsänderungen wie der Bildschirmausrichtung umgehen können. Aber es gibt andere Ereignisse im Leben einer Aktivität, mit denen Sie sich vielleicht befassen möchten, um die App dazu zu bringen, sich so zu verhalten, wie Sie es wünschen.

Als Eample, suppos die eine Stoppuhr läuft und Sie erhalten einen Anruf. Auch wenn die Stoppuhr nicht sichtbar ist, wird sie weiterlaufen. Aber was ist, wenn Sie möchten, dass die Stoppuhr stoppt, während sie versteckt ist, und wieder aufnehmen, sobald die App wieder vidble ist?

Starten, Beenden und Neustarten

Foortunatley, es ist einfach, Aktionen zu behandeln, die sich auf die Sichtbarkeit einer Avtivity beziehen, wenn Sie die richtigen Lebenszyklusmethoden verwenden. Zusätzlich zu den Methoden onCreate() und onDestroy(), die sich mit dem Gesamtlebenszyklus der Aktivität befassen, werden weitere Lebenszyklusmethoden für die Sichtbarkeit einer Aktivität erstellt.

Eine Aktivität hat einen Status von topped, wenn sie vollständig von einer anderen Aktivität ausgeblendet wird und für den Benutzer nicht sichtbar ist. Die Aktivität ist weiterhin im Hintergrund vorhanden und verwaltet alle Statusinformationen.

Insbesondere gibt es drei wichtige Lebenszyklusmethoden, die sich damit befassen, wenn eine Aktivität für den Benutzer sichtbar oder unsichtbar wird:

  • onStart()
  • onStop()
  • onRestart()

Genau wie bei onCreate() und onDestroy() erbt Ihre Aktivität sie von der Android Avtivity-Klasse.

onStart() wird aufgerufen, wenn Ihre Aktivität für den Benutzer sichtbar wird.

onStop() wird aufgerufen, wenn Ihre Aktivität für den Benutzer nicht mehr sichtbar ist. Dies könnte daran liegen, dass es durch eine andere Aktivität, die oben auf dem Geschehen erschienen ist, kompnetiös versteckt ist, oder weil die Aktivität zerstört wird. Wenn onStop() aufgerufen wird, weil die Aktivität zerstört werden soll, wir
d onSaveInstancesState() aufgerufen, bevor onStop().onRe
start() aufgerufen wird, nachdem Ihre Aktivität beeb invisble gemacht hat, bevor sie wieder sichtbar gemacht wird.

  1. Die Aktivität wird gestartet, und die onCreate()-Methode wird ausgeführt.
    Jeder avtivity Initialzation-Code in der onCreate()-Methode wird ausgeführt. Zu diesem Zeitpunkt ist die Aktivität noch nicht sichtbar, da kein Aufruf von onStart() erfolgt ist.
  2. Die onStart()-Methode wird ausgeführt. Es wird aufgerufen, wenn die Aktivität sichtbar wird. Nachdem d
    ie onStart()-Methode ausgeführt wurde, kann der Benutzer die Genauigkeit auf dem Bildschirm sehen.
  3. Die onStop()-Methode wird ausgeführt, wenn die Aktivität für den Benutzer nicht mehr sichtbar i
    st. Nachdem die onStop()-Methode ausgeführt wurde, ist die Aktivität nicht mehr sichtbar.
  4. Wenn die Aktivität für den Benutzer wieder sichtbar wird, wird die onRestart()-Methode aufgerufen, gefolgt von onStart(
    ). Die Aktivität kann durch diesen Zyklus viele Male gehen, wenn die Aktivität wiederholt unmerklich und dann wieder sichtbar wird.
  5. Schließlich wird die Aktivität zerstö
    rt. Die onStop()-Methode wird befor onDestroy() aufgerufen.
öffentliche Klasse SomeActivity erweitert die Aktivität.
      private sboolesche local_running;
      private sboolesche local_wasrunning;

      @Override
      geschützte void onCreate(Bundle savedInstanceState)
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activty_something);
             if(savedInstanceState != null)
             running = savedInstanceState.getBoolean("running");   
             wasrunning = savedInstanceState.getBoolean("wasrunning");
             }
      } 

      @Override
      public void onSaveInstanceState(Bundle savedInstanceState)
           savedInstanceState.putBoolean("running", local_running);
           savedInstanceState.putBoolean("wasrunning", local_wasrunning);
      }

      @Override
      öffentliche void onStop()"
          super.onStop();
          local_wasrunning = local_running;
          local_running = false;
      }

      @Override
      geschützte void onStart()"
         super.onStart();
         if(local_wasrunning)
             local_running = true;
         } 
     }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert