Heim  >  Artikel  >  Java  >  Android – Aktivität类

Android – Aktivität类

高洛峰
高洛峰Original
2016-11-17 14:26:582567Durchsuche

Stellen Sie zunächst Aktivität vor

1. Was ist Aktivität:

Aktivität ist ein Benutzeroberflächenprogramm, das Benutzern im Prinzip eine interaktive Schnittstellenfunktion bietet. Es ist die grundlegende Funktionseinheit von Android-Anwendungen. Die Aktivität selbst hat keine Schnittstelle. Die Aktivitätsklasse erstellt also ein Fenster, und Entwickler können die Benutzeroberfläche über die setContentView(View)-Schnittstelle in das von der Aktivität erstellte Fenster einfügen. Wenn die Aktivität auf das Vollbildfenster zeigt, kann dies auch auf andere Weise implementiert werden: als ein schwebendes Fenster (über die Themensammlung von windowIsFloating ) oder in andere Aktivitäten eingebettet (mithilfe von ActivityGroup). Die Aktivität ist eine separate Aktivität und wird zur Abwicklung von Benutzervorgängen verwendet. Fast alle Aktivitäten müssen sich mit Benutzern auseinandersetzen

2. Aktivitätslebenszyklus

Android – Aktivität类

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);
 
protected void onStart();
 
protected void onRestart();
 
protected void onResume();
 
protected void onPause();
 
protected void onStop();
 
protected void onDestroy();

}

Wie auf dem Bild zu sehen ist:

Während des normalen Starts einer Aktivität ist die Reihenfolge dieser Methodenaufrufe onCreate -> onStart -> Kompletter Lebenszyklus. Für die Unterbrechungsverarbeitung (z. B. einen eingehenden Anruf) gilt dann onPause -> onStop, und beim Fortsetzen ist onStart -> onResume; , dann ist der Interrupt onPause und onResume während der Wiederherstellung.

Wenn also auf unserem Mobiltelefon eine Anwendung ausgeführt wird, kann es zu Anrufen oder Textnachrichten kommen oder es ist möglicherweise kein Strom vorhanden. Zu diesem Zeitpunkt wird das Programm unterbrochen und die Die Grundfunktionen des Telefons werden vorrangig genutzt. Zumindest einige Funktionen (z. B. Telefonanrufe) müssen jedoch gewährleistet sein, wenn Ressourcen vorhanden sind unzureichend.

Die Rolle der Methode im System und was wir tun sollten:

onCreate: Hier eine Schnittstelle erstellen und einige Dateninitialisierungsarbeiten durchführen

onStart: Hier ändern Schritt Wird „für den Benutzer sichtbar, aber nicht interaktiv“;

onResume: Wird mit dem Benutzer interaktiv (das Aktivitätsstapelsystem verwaltet diese Aktivitäten über den Stapel, d. h. die aktuelle Aktivität befindet sich oben im Stapel). Stapel, und nach dem Ausführen den Stapel öffnen und zur vorherigen Aktivität zurückkehren);

onPause: Zu diesem Zeitpunkt ist es sichtbar, aber nicht interaktiv, und das System stoppt Animationen und andere Dinge, die die CPU verbrauchen. Aus der obigen Beschreibung wissen wir bereits, dass einige Ihrer Daten hier gespeichert werden sollten, da zu diesem Zeitpunkt die Priorität Ihres Programms herabgesetzt wird und diese möglicherweise vom System zurückgenommen werden. Die hier gespeicherten Daten sollen in onResume ausgelesen werden.

onStop: wird unsichtbar und wird von der nächsten Aktivität abgedeckt

onDestroy: Dies ist die letzte Methode, die aufgerufen wird, bevor die Aktivität beendet wird. Möglicherweise rufen andere Klassen die Finish-Methode oder das System auf Um Platz zu sparen und ihn vorübergehend zu beenden, können Sie ihn mit isFinishing() beurteilen. Wenn in einem Thread ein Fortschrittsdialog ausgeführt wird, brechen Sie ihn bitte in onDestroy ab. Andernfalls rufen Sie die Methode cancel des Dialogs auf wird eine Ausnahme auslösen.

OnPause, onstop, onDestroy, in diesen drei Zuständen kann die Aktivität vom System beendet werden.

3. Kommunikation zwischen Aktivitäten

In Android können verschiedene Aktivitätsinstanzen in einem Prozess oder in verschiedenen Prozessen ausgeführt werden. Daher benötigen wir einen speziellen Mechanismus, der uns hilft, Nachrichten zwischen Aktivitäten weiterzugeben. Android verwendet ein Intent-Objekt, um eine Nachricht darzustellen. Ein Intent-Objekt enthält nicht nur das Ziel der Nachricht, sondern auch den Inhalt der Nachricht. Dies ist wie eine E-Mail, die nicht nur die Empfängeradresse, sondern auch den spezifischen Inhalt enthalten sollte . Für ein Intent-Objekt ist die Nachricht „destination“ erforderlich, der Inhalt ist jedoch optional.

Die Absicht ist dafür verantwortlich, die Aktion des Vorgangs, die an der Aktion beteiligten Daten und die zusätzlichen Daten zu beschreiben. Android ist dafür verantwortlich, die entsprechende Komponente basierend auf der Beschreibung dieser Absicht zu finden und die Absicht an die zu übergeben aufrufende Komponente und Abschluss des Aufrufs der Komponente. Daher spielt Intent hier die Rolle eines Medienvermittlers, der insbesondere Informationen über einander anrufende Komponenten bereitstellt und eine Entkopplung zwischen Anrufer und Angerufenem herstellt.

In der Anwendung können wir Intent in zwei Formen verwenden:

Direkter Intent: Intent, der das Komponentenattribut angibt (rufen Sie setComponent(ComponentName) oder setClass(Context, Class) auf, um es anzugeben). Durch Angabe einer bestimmten Komponentenklasse wird die Anwendung benachrichtigt, die entsprechende Komponente zu starten.

Indirekte Absicht: Absicht, die das Comonent-Attribut nicht angibt. Diese Absichten müssen genügend Informationen enthalten, damit das System anhand dieser Informationen unter allen verfügbaren Komponenten die Komponente ermitteln kann, die diese Absicht erfüllt.
Für direkte Absichten muss Android nicht analysieren, da die Zielkomponente bereits klar ist.

Was Android analysieren muss, sind diese indirekten Absichten. Durch das Parsen wird die Absicht der Aktivität, dem IntentReceiver oder dem Dienst zugeordnet, der die Absicht verarbeiten kann. Der Intent-Parsing-Mechanismus sucht hauptsächlich nach allen in AndroidManifest.xml registrierten IntentFiltern und den darin definierten Intents und findet schließlich den passenden Intent.

4. Der Absichtsfilter der Aktivität

Der Absichtsfilter beschreibt, welche Art von Absichtsobjekten eine Komponente empfangen möchte, und abstrahiert sie in die Klasse android.content.IntentFilter. In der AndroidManifest.xml-Konfigurationsdatei von Android können Sie den Absichtsfilter für eine Aktivität über den Knoten angeben, um dem System mitzuteilen, auf welche Art von Absicht die Aktivität reagieren kann.

Wenn startActivity(intent) zum Starten einer anderen Aktivität verwendet wird und die Component-Eigenschaft des Intent-Objekts direkt angegeben wird, versucht der Aktivitätsmanager, die durch seine Component-Eigenschaft angegebene Aktivität zu starten. Andernfalls verwendet Android andere Eigenschaften des Intents, um aus allen im System installierten Aktivitäten die am besten passende Aktivität zu finden. Wenn keine geeignete Aktivität gefunden wird, löst das System eine Ausnahme aus. Der Matching-Prozess ist wie folgt:

Android – Aktivität类

5. Stapelverwaltung der Aktivität

Android verwendet einen Stapel für die Aktivitätsverwaltung, was bedeutet, dass es nur eine Aktivität gibt befindet sich oben auf dem Stapel. Wenn diese Aktivität zerstört wird, kann die folgende Aktivität oben auf dem Stapel schweben. Wenn eine neue Aktivität erstellt wird, wird die alte Aktivität auf den Stapel geschoben und sinkt. Aktivität ist die Präsentationsschicht von Android-Programmen. Jeder Anzeigebildschirm des Programms ist eine Aktivität. Die laufende Aktivität befindet sich oben im Stapel und befindet sich im Ausführungsstatus.

Android – Aktivität类

Wenn die Methode Activity.finish() im Programm aufgerufen wird, ist das Ergebnis das gleiche wie wenn der Benutzer die ZURÜCK-Taste drückt: Es teilt dem Activity Manager mit, dass die Aktivität Instanz kann „recycelt“ werden. Anschließend aktiviert der Aktivitätsmanager die Aktivität auf der zweiten Ebene des Stapels, verschiebt die ursprüngliche Aktivität in die zweite Ebene des Stapels und wechselt vom Status „Laufend“ in den Status „Pause“.

6. Aktivitätslademodus

Standard, SingleTop, SingleTask, SingleInstance (die ersten beiden sind eine Gruppe und die letzten beiden sind eine Gruppe), der Standardwert ist Standard

Standard: Die Absicht wird an die neue Instanz gesendet, sodass bei jedem Sprung eine neue Aktivität generiert wird.

singleTop: Es wird auch eine neue Instanz gesendet, der Unterschied zum Standard besteht jedoch darin, dass keine neue Instanz erstellt wird, wenn sich die angeforderte Aktivität genau oben im Stapel befindet (Aktivität als singleTop konfiguriert). >

singleTask: und die nachfolgende singleInstance erstellen nur eine Instanz. Wenn die Absicht eintrifft und es erforderlich ist, eine auf singleTask festgelegte Aktivität zu erstellen, prüft das System, ob bereits eine Instanz der Aktivität im Stapel vorhanden ist. Wenn ja, senden Sie die Absicht direkt dorthin.

einzelne Instanz:

Erklären wir zunächst das Konzept der Aufgabe. Eine Aufgabe kann als Stapel betrachtet werden, der in mehrere Aktivitäten eingeteilt werden kann. Wenn beispielsweise eine Anwendung gestartet wird, erstellt Android eine Aufgabe und startet dann die Eintragsaktivität der Anwendung. Nur in dieser Aufgabe können dann andere Aktivitäten auf seiner Oberfläche aufgerufen werden. Was passiert also, wenn Sie eine Aktivität auf mehrere Aufgaben verteilen? Wenn Sie beispielsweise eine Reiseführerdienstanwendung öffnen, gibt es darin eine Aktivität, die GOOGLE Maps öffnet. Wenn Sie die Home-Taste drücken, um zum Hauptmenü zurückzukehren und die GOOGLE Maps-Anwendung erneut zu starten, wird die Karte gerade angezeigt. Tatsächlich handelt es sich um dieselbe Aktivität. Tatsächlich wird hierdurch eine einzelne Instanz eingeführt. Der SingleInstance-Modus besteht darin, die Aktivität separat in einen Stapel zu legen, sodass sich nur diese Aktivität im Stapel befindet und die Absichten verschiedener Anwendungen von dieser Aktivität empfangen und angezeigt werden, wodurch eine gemeinsame Nutzung erreicht wird. Voraussetzung ist natürlich, dass diese Anwendungen nicht zerstört wurden, sodass die HOME-Taste gerade gedrückt wurde. Wenn die Eingabetaste gedrückt wird, ist sie ungültig.

7. Aktivitätssprung

Aktivitätssprung, kein Ergebnis zurückgegeben


Dies ist der einfachste Weg, zur Aktivität zu springen. Um eine andere Aktivität von einer Aktivität aus zu starten, starten Sie direkt Activity(new Intent(current Activity.this, next Activity.class)).

Aktivität springt und gibt Daten/Ergebnisse zurück


Wenn Sie Daten oder Ergebnisse zurückgeben müssen, verwenden Sie startActivityForResult (Intent intent, int requestCode). Der Wert von requestCode wird angepasst Identifizieren Sie die Zielaktivität des Sprungs. Die Sprungzielaktivität muss lediglich Daten/Ergebnisse zurückgeben. setResult(int resultCode) gibt nur Ergebnisse ohne Daten zurück, oder setResult(int resultCode, Intent data) gibt beides zurück! Die Verarbeitungsfunktion, die die zurückgegebenen Daten/Ergebnisse empfängt, ist onActivityResult(int requestCode, int resultCode, Intent data). Der requestCode ist hier der requestCode von startActivityForResult, der resultCode ist der resultCode in setResult und die zurückgegebenen Daten sind in data.

** Beachten Sie, dass Sie nach setResult Finish() aufrufen müssen, um die aktuelle Aktivität zu zerstören. Andernfalls können Sie nicht zur ursprünglichen Aktivität zurückkehren und die onActivityResult-Funktion der ursprünglichen Aktivität nicht ausführen und sehen, dass die aktuelle Aktivität dies tut nicht antworten.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn