suchen
HeimJavajavaLernprogrammDetaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

Dieser Artikel führt Sie in den Lebenszyklus von Aktivität ein. Wenn Sie iOS studiert haben, ist der Lebenszyklus von Aktivität dem Lebenszyklus von ViewController in iOS sehr ähnlich. Der Lebenszyklus ist nicht schwer zu verstehen. Der Lebenszyklus eines Menschen besteht aus nichts anderem als Geburt, Alter, Krankheit und Tod, und der Lebenszyklus einer Blume besteht aus dem Blühen und Verblühen. Der Lebenszyklus von Aktivitäten in Android ist nichts anderes als der Prozess von der Aktivitätserstellung bis zum Tod. In diesem Blog werden die verschiedenen Phasen des Aktivitätslebenszyklus vorgestellt und anhand von Beispielen ein Blick auf den Aktivitätslebenszyklus geworfen. Es ist von entscheidender Bedeutung, den Lebenszyklus der Aktivität zu verstehen, denn nur wenn Sie jede Phase jedes Lebenszyklus verstehen, können Sie in verschiedenen Phasen unterschiedliche Dinge tun.

Als nächstes stellen wir den Lebenszyklus der Aktivität anhand eines Beispiels vor. In dieser Demo wird eine MainActivity angezeigt, die erste Aktivität, die nach dem Start der App angezeigt wird. Es gibt eine Schaltfläche auf MainActivity. Durch Klicken auf die Eingabetaste gelangen Sie von SecondActivity zu MainActivity. Durch diese Reihe von Aktivitätswechseln beobachten wir den Aktivitätslebenszyklus, indem wir ein Protokoll drucken.

1. Code schreiben

Tatsächlich ist der Code dieses Blogs sehr einfach. Er besteht darin, die Methoden in verschiedenen Phasen des Aktivitätslebenszyklus neu zu schreiben und dann die Methode auszudrucken um die Phase dieses Lebenszyklus zu markieren. Die Benutzeroberfläche der Demo ist ebenfalls sehr einfach, daher werde ich nicht zu sehr auf die Layoutdatei der Aktivität eingehen. Schauen Sie sich als Nächstes die Schlüsselcodes in den beiden Aktivitäten an.

1. Der folgende Code ist der Schlüsselcode in MainActivity. Er schreibt verschiedene Phasen des Aktivitätslebenszyklus neu und druckt dann das Protokoll, um zu markieren, welche Methode in welcher Aktivität vorliegt. Rufen Sie die Schaltfläche per ID in der onCreate()-Methode ab, binden Sie dann das Klickereignis an die Schaltfläche und springen Sie zu SecondActivity, wenn auf die Schaltfläche geklickt wird. Der spezifische Code lautet wie folgt.

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("lifeCycle", "MainActivity: 我是onCreate方法,我会在Activity第一次被创建是调用");
    Button jumpButton = (Button) findViewById(R.id.jump_second_button);
    jumpButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //跳转到SecondActivity
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);
      }
    });
  }
  //Ctrl + O 选择父类中的方法进行重写
  @Override
  protected void onStart() {
    super.onStart();
    Log.d("lifeCycle", "MainActivity: 我是onStart方法,我会在Activity由不可见变为可见时调用");
  }
  @Override
  protected void onResume() {
    super.onResume();
    Log.d("lifeCycle", "MainActivity: 我是onResume方法,我在Activity处于运行状态时调用");
  }
  @Override
  protected void onPause() {
    super.onPause();
    Log.d("lifeCycle", "MainActivity: 我是onPause方法,我会在Activity暂停时调用");
  }
  @Override
  protected void onStop() {
    super.onStop();
    Log.d("lifeCycle", "MainActivity: 我是onStop方法,我会在Activity停止时调用");
  }
  @Override
  protected void onRestart() {
    super.onRestart();
    Log.d("lifeCycle", "MainActivity: 我是onRestart方法,我会在Activty从停止状态变为运行状态时调用");
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    Log.d("lifeCycle", "MainActivity: 我是onDestroy方法,我会在Activty销毁之前调用");
  }

2. Die obige Methode wird auch in SecondActivity umgeschrieben. Der einzige Unterschied besteht darin, die MainActivity im obigen Protokoll zu ändern. Der Code ist ähnlich und wird nicht nach oben eingefügt.

2. Führen Sie das gedruckte Protokoll aus und beobachten Sie es.

Führen Sie unsere App aus, beobachten Sie dann das gedruckte Protokoll und analysieren Sie den Aktivitätslebenszyklus anhand von Beispielen. Die spezifischen Schritte sind wie folgt:

1. Aktivität erstellen und aktivieren

Das beim ersten Öffnen der App gedruckte Protokoll sieht wie folgt aus. MainActivity ist das Erste, was Sie sehen, wenn Sie die App öffnen. Durch das Protokoll können wir leicht erkennen, dass die folgenden drei Methoden aufgerufen werden müssen, wenn MainActivity zum ersten Mal angezeigt wird. Nach den drei folgenden Methoden wird MainActivty erstellt und dann sichtbar , und endlich in einem lauffähigen Zustand.

(1).onCreate()-Methode: Diese Methode wird aufgerufen, wenn die Aktivität zum ersten Mal erstellt wird. In der vorherigen Demo haben wir das Layout und/oder die Steuerelemente der Aktivität und zugehöriger Ereignisse darin geladen Verfahren.

(2).onStar()t-Methode: Dann wird die onStart()-Methode ausgeführt. Diese Methode wird aufgerufen, wenn die Aktivität von unsichtbar zu sichtbar wechselt.

(3).onResume-Methode: Nachdem die Aktivität sichtbar wird, muss die onResume-Methode aufgerufen werden, um sie in den laufenden Zustand zu versetzen.

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

2. Wechseln zwischen Aktivitäten

Um es klarer zu machen, können wir das Protokoll löschen, bevor wir auf die Schaltfläche „SecondActivity“ klicken links unten Die Eimermarkierung dient zum Löschen zuvor gedruckter Protokolle. Das unten gedruckte Protokoll ist das Protokoll, das gedruckt wird, wenn auf die Sprungschaltfläche geklickt wird. Während dieses Umschaltvorgangs stoppt MianActivty die Ausführung und wird unsichtbar. SecondActivy wird erstellt und befindet sich im Ausführungszustand. Die spezifischen Schritte sind wie folgt.

(1).onPause()-Methode: Wenn auf die Sprungschaltfläche geklickt wird, ruft die laufende MainActivity onPause() auf, um angehalten zu werden, ist aber weiterhin sichtbar.

(2). Dann ruft SecondActivity die Methode onCreate() zum Erstellen, die Methode onStart() zum Anzeigen und die Methode onResume() zum Ausführen auf.

(3).onStop()-Methode: Wenn SecondActivity ausgeführt wird, ist MainActivity vollständig unsichtbar, daher wird die onStop()-Methode aufgerufen, um in einen vollständig unsichtbaren Stoppzustand zu gelangen.

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

3. Rückkehr von einer anderen Aktivität

Klicken Sie auf die Eingabetaste von SecondActivity, um von SecondActivity zur MainActivity zurückzukehren. Das folgende Protokoll ist das Protokoll, das gedruckt wird, wenn auf die Schaltfläche „Zurück“ geklickt wird.

(1) Methode „onPause()“: Nach dem Klicken auf die Schaltfläche „Zurück“ ruft SecondActivity die Methode „onPause()“ auf und wechselt in den angehaltenen Betriebszustand.

(2)onRestart()-Methode: Dann ruft MainActivity die onRestart()-Methode auf, um vom gestoppten Zustand in den laufenden Zustand zu wechseln. Dann ruft MainActivity die onStart-Methode von unsichtbar nach sichtbar auf und ruft dann die onResume()-Methode auf, um schließlich in den laufenden Zustand zu gelangen.

(3)当返回到MainActivity中并且MainActivity处于运行状态后,SecondActivity会调用onStop方法,停止运行并不可见。因为SecondActivty做的事出栈操作,停止运行后,就会调用onDestory方法进行销毁。下此在进入SecondActivity中时,还是从onCreate方法进行执行。

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

4.Activity退出并销毁

接着在MainActivity中点击返回按钮就会退出App了,下方是退出App时打印的Log信息。MainActivty先调用onPause()方法变为暂停运行状态,然后再调用onStop()方法停止运行,最后调用onDestroy()方法进行销毁。

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

三.生命周期流程图

1.上面是用语言通过实例打印出的Log来描述两个Activity切换的生命周期,接下来将用一个流程图来描述这一过程,具体流程图如下。

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

2.通过上面的实例不难分析出一个Activity的生命周期分为哪些阶段,并且很容易的看出哪些阶段在什么时候执行,所以我们很容易的画出一个Activity的生命周期,下方的流程图是一个Activity的生命周期。

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

四.Activity的加载模式

Activity的启用模式也较为简单,它会在活动切换时用到。Activity的启动模式分为四种,standard、singleTop、singleTask、singleInstance模式。接下来将为大家详细的介绍一下这几种加载模式。

Activity的加载模式可以在配置文件AndroidManifest.xml中进行配置,配置项为android:launchMode具体如下图所示:

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

1.standard模式

在Activity的栈中无论该活动有没有加入栈,活动就会被创建。测试方式是把MainActivity的launchMode设置成standard, 在MainActivity中添加一个按钮,点击按钮使用Intent跳转到当前Activity,看onCreate方法中打印的Log。点击按钮的方法如下:

Button launchModelButton = (Button) findViewById(R.id.launch_model_button);
    launchModelButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, MainActivity.class);
        startActivity(intent);
      }
    });

   

standard加载模式的栈如下所示,无论栈中有没有该对象的实例,都会被创建。

2.singleTop模式

只要被创建的活动不位于栈的顶部,该活动就会被创建入栈。如果将要被创建的活动位于栈的顶部,该活动的实例就不会被创建。测试方法,把上面的模式直接改成singleTop模式,MainActivty往自己身上跳转就不会从新创建一个新的实例,会重用之前在栈顶中的实例。如果是MainActivty跳转到SecondActivty, 然后SecondActivity再次跳转到MainActivty, 那么此时的MainActivity将会被创建,因为栈顶是SecondActivity。如下所示:

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

3.singleTask模式

单任务模式,这个也不难理解,如果从MainActivty跳转到SecondActivity, 如果再从SecondActivty跳转到MainActivity, 在单任务模式下MainActivity已经在栈中,就会把它之前的Activity出栈,使其处于在栈顶活跃的位置。原理如下图所示:

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

4.singleInstance

可以看成单例模式,这个比较特殊,被设置成singleInstance的Activity将会放入另一个栈中,因为这样为了便于共用。上面3中模式位于同一个栈中。下方ThirdActivity跳转到一个加载模式为singleInstance的Activity中。

Detaillierte Erläuterung des Aktivitätslebenszyklus und des Lademodus in der Android-Entwicklung

Das war's für den heutigen Aktivitätslebenszyklus. Die relevanten Inhalte werden im nächsten Blog aktualisiert.

Ausführlichere Erläuterungen zum Lebenszyklus und Lademodus von Aktivitäten in der Android-Entwicklung finden Sie auf der chinesischen PHP-Website!


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
Warum ist Java eine beliebte Wahl für die Entwicklung plattformübergreifender Desktop-Anwendungen?Warum ist Java eine beliebte Wahl für die Entwicklung plattformübergreifender Desktop-Anwendungen?Apr 25, 2025 am 12:23 AM

Javaispopularforcross-plattformdesktopapplicationsduetoits "writeonce, runanywhere" philosophy.1) itusesBytecodethatrunsonanyjvm-tequippedplatform.2) BibliothekenlikeswingandjavafxHelPcreeTsuokninguis.3) itsextsextSesiveSivestandsupports-Lyuis.3) itsextsextSesiveSivestandsupports-Lyuis.3) itsextsextSextsenSivestandsupports-Capo- und --3) itsextsextSextSesiveSivestandsuppandSpommes-Capo-

Besprechen Sie Situationen, in denen das Schreiben von Plattform-spezifischer Code in Java erforderlich ist.Besprechen Sie Situationen, in denen das Schreiben von Plattform-spezifischer Code in Java erforderlich ist.Apr 25, 2025 am 12:22 AM

Gründe für das Schreiben von plattformspezifischem Code in Java sind Zugriff auf bestimmte Betriebssystemfunktionen, die Interaktion mit spezifischer Hardware und die Optimierung der Leistung. 1) Verwenden Sie JNA oder JNI, um auf die Windows -Registrierung zuzugreifen. 2) mit Linux-spezifischen Hardware-Treibern über JNI zu interagieren; 3) Verwenden Sie Metal, um die Spiele auf MacOS über JNI zu optimieren. Das Schreiben von Plattform-spezifischer Code kann jedoch die Portabilität des Codes beeinflussen, die Komplexität erhöhen und potenziell Leistungsaufwand und Sicherheitsrisiken darstellen.

Was sind die zukünftigen Trends in der Java -Entwicklung, die sich auf die Unabhängigkeit der Plattform beziehen?Was sind die zukünftigen Trends in der Java -Entwicklung, die sich auf die Unabhängigkeit der Plattform beziehen?Apr 25, 2025 am 12:12 AM

Java wird die Unabhängigkeit der Plattform durch Cloud-native Anwendungen, die Bereitstellung von Multi-Plattform und die Interoperabilität von Cloud-nativen verbessern. 1) Native Cloud -Anwendungen verwenden Graalvm und Quarkus, um die Startgeschwindigkeit zu erhöhen. 2) Java wird auf eingebettete Geräte, mobile Geräte und Quantencomputer ausgedehnt. 3) Durch Graalvm wird sich Java nahtlos in Sprachen wie Python und JavaScript integrieren, um die Interoperabilität der Cross-Sprache zu verbessern.

Wie trägt die starke Typisierung von Java zur Unabhängigkeit der Plattform bei?Wie trägt die starke Typisierung von Java zur Unabhängigkeit der Plattform bei?Apr 25, 2025 am 12:11 AM

Das stark typisierte System von Java sorgt für die Unabhängigkeit der Plattform durch Typsicherheit, einheitlicher Typumwandlung und Polymorphismus. 1) GEYPECTE SEITET TYP -Überprüfung zum Kompilierungszeit, um Laufzeitfehler zu vermeiden. 2) Einheitliche Konvertierungsregeln für Typen sind auf allen Plattformen konsistent. 3) Polymorphismus und Grenzflächenmechanismen verhalten den Code konsequent auf verschiedenen Plattformen.

Erklären Sie, wie Java Native Interface (JNI) die Unabhängigkeit der Plattform beeinträchtigen kann.Erklären Sie, wie Java Native Interface (JNI) die Unabhängigkeit der Plattform beeinträchtigen kann.Apr 25, 2025 am 12:07 AM

JNI wird die Unabhängigkeit von Javas Plattform zerstören. 1) JNI erfordert lokale Bibliotheken für eine bestimmte Plattform, 2) lokaler Code muss auf der Zielplattform zusammengestellt und verknüpft werden.

Gibt es aufkommende Technologien, die die Unabhängigkeit der Plattform von Java bedrohen oder verbessern?Gibt es aufkommende Technologien, die die Unabhängigkeit der Plattform von Java bedrohen oder verbessern?Apr 24, 2025 am 12:11 AM

Aufstrebende Technologien stellen sowohl Bedrohungen dar und verbessert die Plattformunabhängigkeit von Java. 1) Cloud Computing- und Containerisierungstechnologien wie Docker verbessern die Unabhängigkeit der Java -Plattform, müssen jedoch optimiert werden, um sich an verschiedene Cloud -Umgebungen anzupassen. 2) WebAssembly erstellt Java -Code über Graalvm, wodurch die Unabhängigkeit der Plattform erweitert wird, muss jedoch mit anderen Sprachen um die Leistung konkurrieren.

Was sind die unterschiedlichen Implementierungen des JVM und bieten alle die gleiche Unabhängigkeit der Plattform?Was sind die unterschiedlichen Implementierungen des JVM und bieten alle die gleiche Unabhängigkeit der Plattform?Apr 24, 2025 am 12:10 AM

Verschiedene JVM -Implementierungen können die Unabhängigkeit von Plattformen bieten, ihre Leistung ist jedoch etwas unterschiedlich. 1. OracleHotSpot und OpenJDKJVM können in der Plattformunabhängigkeit ähnlich erfolgen, aber OpenJDK erfordert möglicherweise eine zusätzliche Konfiguration. 2. IBMJ9JVM führt eine Optimierung für bestimmte Betriebssysteme durch. 3.. Graalvm unterstützt mehrere Sprachen und erfordert zusätzliche Konfiguration. 4. Azulzingjvm erfordert spezifische Plattformanpassungen.

Wie reduziert die Unabhängigkeit der Plattform die Entwicklungskosten und die Zeit?Wie reduziert die Unabhängigkeit der Plattform die Entwicklungskosten und die Zeit?Apr 24, 2025 am 12:08 AM

Die Unabhängigkeit der Plattform senkt die Entwicklungskosten und verkürzt die Entwicklungszeit, indem es denselben Code -Satz auf mehreren Betriebssystemen ausführt. Insbesondere manifestiert es sich als: 1. Reduzieren Sie die Entwicklungszeit, es ist nur ein Codesatz erforderlich; 2. Reduzieren Sie die Wartungskosten und vereinen Sie den Testprozess; 3.. Schnelle Iteration und Teamzusammenarbeit, um den Bereitstellungsprozess zu vereinfachen.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung