Heim >Web-Frontend >Front-End-Fragen und Antworten >Android-Interviewfragen: vier Hauptkomponenten
Empfohlen: „2020 Android Interview Questions Collection [Sammlung] “
Ob es im Vordergrund steht, für den Benutzer sichtbar ist oder nicht
A ruft onPause()>>onStop() zurück, transparent ruft onStop() nicht auf und das Dialogfeld ruft onPause() und onStop() nicht auf
Diese Methode wird aufgerufen, wenn die Aktivität versehentlich zerstört und dann neu erstellt wird. Der Wechsel zwischen horizontalen und vertikalen Bildschirmen führt beispielsweise dazu, dass die Aktivität neu erstellt wird. Die Methode onSaveInstance() wird zuvor aufgerufen onStop() zum Speichern des Status der aktuellen Aktivität. Wenn die Aktivität neu erstellt wird, wird onRestoreInstanceState() aufgerufen, um den Status der Aktivität wiederherzustellen, bevor onStart() aufgerufen wird.
Es gibt keine feste Reihenfolge, in der die beiden ausgeführt werden.
Das typische Szenario ist das Drücken der Home-Taste oder das Wechseln von Aktivitäten. Wenn Sie jedoch die Zurück-Taste drücken, um das Programm zu verlassen Die Methode wird nicht aufgerufen und eignet sich zum Speichern einiger nicht persistenter Daten (d. h. Daten, die während der Ausführung des Programms gespeichert werden müssen).
Onpause() muss aufgerufen werden, unabhängig davon, ob das Programm zerstört oder beendet wird. Es eignet sich zum Speichern persistenter Daten. Android selbst stellt jedoch keinen Bundle-Parameter für diese Methode bereit, sodass wir uns dafür entscheiden können statische Variable oder Es stellt eine gemeinsame Präferenz als Datenträger bereit.
Wenn Sie jede Aktivität in der Manifestdatei registrieren, schreiben Sie
android:configChanges="XXX"
Zum Beispiel das Umschalten zwischen horizontalen und vertikalen Bildschirmen: android:configChanges=" Orientierung"
1. Wenn sich die App im Hintergrund befindet und vom System recycelt wird, wird der Prozess der App abgebrochen, die Aktivität wird ebenfalls recycelt und die Aufgaben- und Aktivitätsstapel der App sowie die entsprechenden Absichten und Daten werden von gespeichert das System. Wenn die App wieder in den Vordergrund geschaltet wird, stellt das System die Aufgaben- und Aktivitätsstapel sowie die entsprechenden Absichten und Daten wieder her.
2. Speichern Sie keine Daten in der Anwendungsklasse und der globalen Singleton-Klasse, da die App sonst ihren Status nicht korrekt wiederherstellen kann. Temporäre Daten während der Laufzeit sollten in SharedPreference, temporären Dateien oder Datenbanken gespeichert werden
3 Der vom System bereitgestellte Absichtsmechanismus sollte verwendet werden, um Daten zwischen Aktivitäten zu übertragen.
https://blog.csdn.net/mountain_hua/article/details/81481242
Stack-Top-Wiederverwendung: Lösen Sie das Problem des wiederholten Öffnens von Aktivitäten.
Wiederverwendung im Stapel: Wenn ein Aufgabenstapel die Aktivität eines anderen Programms aufrufen möchte, wie folgt:
Im SingleTop- und SingleTask-Modus gibt es eine entsprechende Aktivität und onNewIntent() der Aktivität wird aufgerufen.
Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//SingleTask-Modus angeben, der den gleichen Effekt hat wie die Angabe von android:launchMode „singleTask“ in AndroidManifest.xml
Intent.addFlags (Intent .FLAG_ACTIVITY_SINGLE_TOP);
//Geben Sie den SingleTop-Modus an, der den gleichen Effekt hat wie die Angabe von android:launchMode "singleTop" in AndroidManifest.xml
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Hat dies: Wenn die markierte Aktivität gestartet wird, befindet sie sich im selben Aufgabenstapel, sodass die darüber liegende Aktivität aus dem Stapel entfernt wird. Sie wird normalerweise zusammen mit dem SingleTask-Modus
Intent.addFlags angezeigt (Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
// Aktivitäten mit diesem Flag werden nicht in der historischen Aktivitätsliste angezeigt. Dies entspricht der Angabe von Android:excludeFromRecents="true"
Die Priorität des Flag-Bits ist höher als die in AndroidManifest angegebene Priorität
SingleTask und taskAfiinity werden zusammen verwendet
https://www.jianshu.com/p/9ecea420eb52
Die folgende Abbildung beschreibt die Beziehung zwischen Fragment und Aktivitätslebenszyklus sehr gut
1. Beginnen wir mit den Grundlagen ---> Aktivität hat 7 Lebenszyklen: onCreate(); onPause(); ; onDestroy(); onResume(); (); onDestroy(); onDetach();
Fragment ist also flexibler als Aktivität, da es mehr Lebenszyklen gibt und Sie mehr Kontrolle haben.
In Bezug auf die Flexibilität
Aktivität ist der Träger jeder Seite des Fragments können Sie während des Zyklus herausfinden.
Fragment ist ein kleines Fragment nach dem anderen
1) Im Vergleich zur Aktivität kann es direkt in die XML-Datei geschrieben oder dynamisch zur Aktivität hinzugefügt werden
2) Sie können show()/hide() oder replace() jederzeit zum Wechseln von Fragmenten verwenden. Beim Wechsel treten keine offensichtlichen Auswirkungen auf, und die Benutzererfahrung wird besser, obwohl auch die Aktivität gewechselt werden kann , aber Aktivitätswechsel haben offensichtliche Seitenwechsel oder andere Auswirkungen, und das Wechseln eines kleinen Teils des Inhalts gibt dem Benutzer kein gutes Gefühl F: Welche Beziehung besteht zwischen Aktivität und Fragment? Die Anzeige von Fragmenten hängt von der Aktivität ab, die aus dem Lebenszyklus von Fragmenten verstanden werden kann.Ähnlich der Menüleiste unter WeChat, aber auch Handy- und Tablet-Anpassung usw.
Start wird direkt gestartet und gebunden ist an die aktuelle Aktivität gebunden.
Wenn ein Dienst gestartet und erneut gebunden wird, läuft der Dienst immer im Hintergrund. Und egal wie es aufgerufen wird, onCreate wird immer nur einmal aufgerufen, entsprechend der Häufigkeit, mit der startService aufgerufen wird, wird onStart von Service genauso oft aufgerufen. Der Aufruf von unbindService stoppt den Dienst nicht, sondern muss stopService oder stopSelf des Dienstes aufrufen, um den Dienst zu stoppen.
AlarmManager bietet Zugriff auf Systemalarmdienste. Dadurch können Sie die Anwendung zu einem späteren Zeitpunkt ausführen. Wenn eine Warnung ertönt, sendet das System die registrierte Absicht und startet automatisch die Zielanwendung, sofern diese noch nicht ausgeführt wird. Registrierte Alarme bleiben erhalten, während sich das Gerät im Ruhezustand befindet (mit der Option, es zu aktivieren, wenn das Gerät während dieser Zeit nicht richtig funktioniert), werden jedoch gelöscht, wenn das Gerät ausgeschaltet und neu gestartet wird. Der Alarmmanager hält eine CPU-Wake-Sperre, solange die onReceive()-Methode des Alarmempfängers ausgeführt wird. Dadurch wird sichergestellt, dass das Telefon nicht in den Ruhezustand wechselt, bis Sie die Übertragung verarbeitet haben. Sobald onReceive() zurückkehrt, gibt der Alarmmanager diese Wecksperre frei. Dies bedeutet, dass das Telefon in einigen Fällen in den Ruhezustand wechselt, sobald die onReceive()-Methode abgeschlossen ist. Wenn Ihr Alarmempfänger Context.startService() aufruft, schläft das Telefon möglicherweise, bevor der angeforderte Dienst gestartet wird. Um dies zu verhindern, müssen Ihr BroadcastReceiver und Ihr Dienst eine separate Wake-Lock-Richtlinie implementieren, um sicherzustellen, dass das Telefon weiter läuft, bis der Dienst verfügbar ist.
Der Vordergrunddienst ist ein für Benutzer sichtbarer Dienst, der in Form von Benachrichtigungen erstellt werden kann
ActivityManagerService (im Folgenden als AMS bezeichnet) ist der Kerndienst in Android. Er ist hauptsächlich für den Start, das Umschalten und die Planung der vier Hauptkomponenten im System sowie für die Verwaltung und Planung von Anwendungsprozessen verantwortlich Die Verantwortlichkeiten sind die gleichen wie die der Prozesse im Betriebssystem. Die Verwaltungs- und Planungsmodule sind ähnlich, daher ist dies in Android sehr wichtig.
onStartCommand
<code><strong>START_STICKY</strong>
START_STICKY
StartCommand()
in
START_STICKY
onStartCommand()
Das System erstellt den Dienst neu und ruft die Methode intent
auf, übergibt jedoch nicht das zuletzt übergebene intent
, sondern nur ein leeres intent
. Sofern keine intent
s zu übergeben sind, werden diese START_NOT_STICKY
intent
Das System erstellt den Dienst nicht neu, es sei denn, es muss ein START_REDELIVER_INTENT
onStartCommand()
Das System erstellt den Dienst neu und ruft die Methode intent
auf, wobei das zuletzt übergebene intent
übergeben wird. Die verbleibenden Dienstpriorität erhöhen
Vordergrunddienste gelten als für bekannte laufende Dienste verwendet und werden nicht zuerst beendet, wenn das System Speicher freigeben muss der Prozess.Senden Sie eine Sendung in onDestory(), um sich selbst zu öffnen
ondestory()
Dienst+Broadcast-Methode, das heißt, wenn der Dienst
Das obige ist der detaillierte Inhalt vonAndroid-Interviewfragen: vier Hauptkomponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!