Heim >Web-Frontend >Front-End-Fragen und Antworten >Android-Interviewfragen: vier Hauptkomponenten

Android-Interviewfragen: vier Hauptkomponenten

藏色散人
藏色散人nach vorne
2020-07-31 14:27:084632Durchsuche

Empfohlen: „2020 Android Interview Questions Collection [Sammlung]

Android Interview Questions (Vier Hauptkomponenten)

Fenster, Prozess , Thread

Android-Interviewfragen (Datenspeicherung, Ansicht)

Aktivität


F: Erzählen Sie mir davon der Lebenszyklus der Aktivität?


F: Was ist der Unterschied zwischen onStart() und onResume()/onPause() und onStop()?

Ob es im Vordergrund steht, für den Benutzer sichtbar ist oder nicht


F: Welche Methoden werden zurückgerufen, wenn Aktivität A eine andere Aktivität B startet? Was wäre, wenn Aktivität B völlig transparent wäre? Was passiert, wenn ein Dialog gestartet wird?

A ruft onPause()>>onStop() zurück, transparent ruft onStop() nicht auf und das Dialogfeld ruft onPause() und onStop() nicht auf


F: Sprechen Sie über die Methode onSaveInstanceState()? Wann wird es aufgerufen?

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.


F: Was ist der Unterschied zwischen onSaveInstanceState() und onPause()?

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.

F: Wie vermeide ich den Neuaufbau von Aktivitäten, wenn sich die Konfiguration ändert?

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"

F: Wie kann eine Aktivität mit niedriger Priorität in den Zustand vor der Zerstörung zurückversetzt werden, nachdem sie aufgrund von unzureichendem Speicher recycelt wurde?

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.

F: Erzählen Sie uns etwas über die vier Startmodi der Aktivität? (Manchmal stellt sich eine praktische Frage zur Analyse der Aktivitätssituation im Rückgabestapel)

https://blog.csdn.net/mountain_hua/article/details/81481242


F: Lassen Sie uns über den Unterschied zwischen SingleTop und SingleTask und Anwendungsszenarien sprechen

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:


F: onNewIntent() Anrufzeit?

Im SingleTop- und SingleTask-Modus gibt es eine entsprechende Aktivität und onNewIntent() der Aktivität wird aufgerufen.


F: Was sind die Flagbits des Aktivitätsstartmodus?

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


F: Wie starte ich die Aktivität anderer Anwendungen?

SingleTask und taskAfiinity werden zusammen verwendet


F: Aktivitätsstartprozess?

https://www.jianshu.com/p/9ecea420eb52

Fragment


F: Sprechen Sie über den Lebenszyklus von Fragment?

Die folgende Abbildung beschreibt die Beziehung zwischen Fragment und Aktivitätslebenszyklus sehr gut

F: Was sind die Ähnlichkeiten und Unterschiede zwischen Aktivität und Fragment? ?

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.

F: Wann erwägen Sie die Verwendung von Fragment?

Ähnlich der Menüleiste unter WeChat, aber auch Handy- und Tablet-Anpassung usw.


Service

F: Let's Sprechen Sie über den Lebenszyklus des Dienstes? https://www.cnblogs.com/huihuizhang/p/7623760.html


F: Wozu dienen die beiden Startmethoden? Service? Was ist der Unterschied?

Start wird direkt gestartet und gebunden ist an die aktuelle Aktivität gebunden.


F: Welche Methode wird zurückgerufen, nachdem eine Aktivität einen Dienst gestartet hat, wenn sie gebunden ist? Was kann zu diesem Zeitpunkt getan werden, um die destroy()-Methode von Service zurückzurufen?

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.


F: Wie kommuniziert der Dienst mit der Aktivität?

Activity ruft die Methode bindService (Intent service, ServiceConnection conn, int flags) auf, um einen Verweis auf das Service-Objekt zu erhalten, sodass die Activity die Methode direkt im Service aufrufen kann, wenn wir möchten Um die Aktivität proaktiv zu benachrichtigen, können wir die Rückrufmethode


    verwenden, um Nachrichten an die Aktivität zu senden. Natürlich muss die Aktivität den entsprechenden Empfänger registrieren. Wenn ein Dienst beispielsweise dieselbe Nachricht an mehrere Aktivitäten senden möchte, ist es besser, diese Methode zu verwenden
  1. F: Welche Systemdienste haben Sie verwendet?
https://blog.csdn.net/geyunfei_/article/details/78851024

F: Kann eine zeitaufwändige Verarbeitung durchgeführt werden? im Dienst? Was kann bei Bedarf getan werden?

Der Dienst wird im Hauptthread ausgeführt. Im Allgemeinen können zeitaufwändige Vorgänge nicht im Dienst ausgeführt werden. Bei Bedarf können Sie einen Remote-Dienst verwenden, um einen neuen Prozess zu starten.


F: Wie kann AlarmManager das Timing implementieren?

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.


F: Was ist der Service an der Rezeption? Wie unterscheidet es sich von gewöhnlichen Diensten? Wie starte ich einen Rezeptionsservice?

Der Vordergrunddienst ist ein für Benutzer sichtbarer Dienst, der in Form von Benachrichtigungen erstellt werden kann


F: Kennen Sie ActivityManagerService und welche Rolle er spielt?

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.


F: Wie kann sichergestellt werden, dass der Dienst nicht beendet wird? Geben Sie in der Methode

onStartCommand <code><strong>START_STICKY</strong>START_STICKY

StartCommand() in

mehreren Konstanten zurück:
  • 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 intents zu übergeben sind, werden diese
  • s übergeben. Dies eignet sich für Dienste wie Spieler, die keine Befehle ausführen müssen, sondern nur alleine laufen und auf Aufgaben warten müssen.
  • START_NOT_STICKY
    intent Das System erstellt den Dienst nicht neu, es sei denn, es muss ein
  • übergeben werden. Dies ist die sicherste Option und verhindert, dass Dienste ausgeführt werden, wenn sie nicht erforderlich sind.
  • 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
  • , die übergeben werden müssen, werden der Reihe nach übergeben. Dies eignet sich für Dienste wie Downloads, die sofort fortgesetzt werden und eine aggressive Leistung erbringen.

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

aufruft, sendet er eine benutzerdefinierte Sendung. Wenn die Übertragung empfangen wird, starten Sie den Dienst neu. Natürlich ist diese Lösung theoretisch machbar und es ist auch möglich, mit den Ergebnissen zu experimentieren. In einigen Fällen wird der gesendete Broadcast jedoch in der Nachrichtenwarteschlange niedriger eingestuft, und es ist möglich, dass der Dienst vor dem Empfang des Broadcasts zerstört wird (nur eine Vermutung). Damit dieser Mechanismus perfekt funktioniert, können Sie zwei Dienste starten, sich gegenseitig überwachen und sich gegenseitig starten. Dienst A hört sich die Übertragung von B an, um B zu starten, und Dienst B hört sich die Übertragung von A an, um A zu starten. Nach Experimenten ist diese Lösung machbar.

Rundfunkempfänger


F: Welche beiden Registrierungsformulare gibt es für den Rundfunk? Was ist der Unterschied?

Es gibt zwei Methoden zum Registrieren von Rundfunkempfängern, nämlich die dynamische Registrierung im Programm und die statische Registrierung in der AndroidManifest-Datei.

Das Merkmal eines dynamisch registrierten Rundfunkempfängers besteht darin, dass die Übertragung ungültig wird, wenn die für die Registrierung verwendete Aktivität deaktiviert wird. Bei der statischen Registrierung müssen Sie sich keine Gedanken darüber machen, ob der Rundfunkempfänger ausgeschaltet ist. Solange das Gerät eingeschaltet ist, ist auch der Rundfunkempfänger eingeschaltet. Das heißt, auch wenn die App selbst nicht gestartet wird, wirkt sich die von der App abonnierte Übertragung beim Auslösen auf sie aus.

ContentProvider


F: Wie viel wissen Sie über ContentProvider?

(1) Die Android-Plattform stellt ContentProvider bereit, um den angegebenen Datensatz einer Anwendung anderen Anwendungen bereitzustellen. Andere Anwendungen können über die ContentResolver-Klasse Daten von diesem Inhaltsanbieter abrufen oder speichern.

(2) Inhaltsanbieter werden nur benötigt, wenn Daten zwischen mehreren Anwendungen geteilt werden müssen. Adressbuchdaten werden beispielsweise von mehreren Anwendungen verwendet und müssen bei einem Inhaltsanbieter gespeichert werden. Der Vorteil besteht darin, dass die Art und Weise, wie auf Daten zugegriffen wird, vereinheitlicht wird.

(3) ContentProvider implementiert den Datenaustausch. ContentProvider wird verwendet, um Daten zu speichern und abzurufen und sie für alle Anwendungen sichtbar zu machen. Dies ist die einzige Möglichkeit, Daten zwischen verschiedenen Anwendungen auszutauschen, da Android keinen gemeinsamen Speicherbereich bereitstellt, auf den alle Anwendungen zugreifen können.

(4) Entwickler verwenden Objekte der ContentProvider-Klasse nicht direkt. Die meisten von ihnen implementieren Operationen für ContentProvider über ContentResolver-Objekte.

(5) ContentProvider verwendet URI, um seinen Datensatz eindeutig zu identifizieren. Dem URI wird hier content:// vorangestellt, was darauf hinweist, dass die Daten von ContentProvider verwaltet werden.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen