Hinweis! In Bezug darauf, wie man versteht, dass onStart sichtbar, aber nicht interaktiv ist, dürfen Programmierer dieses Problem nicht unterschätzen, es beinhaltet eine Menge Dinge!

Vorwort

Heute ist mein Freund auf eine Interviewfrage gestoßen und hat sie mit Ihnen geteilt:

Der onStart-Lebenszyklus zeigt an, dass die Aktivität sichtbar ist. Warum kann sie nicht interagieren?

Diese Frage mag einfach erscheinen, aber es gibt viele Aspekte, wie das Verständnis des Aktivitätslebenszyklus, das Verständnis des Prozesses und das Timing der Ansichtszeichnung.

Lass uns mal sehen.

Einführung in onStart

Zunächst geht es um das Verständnis des onStart-Lebenszyklus.

Die offizielle Website sieht folgendermaßen aus:

Wenn die Aktivität in den Status "gestartet" wechselt, ruft das System diesen Rückruf auf. Der Aufruf von onStart () macht die Aktivität für den Benutzer sichtbar, da die Anwendung sich darauf vorbereitet, dass die Aktivität in den Vordergrund tritt und die Interaktion unterstützt.

Sichtbar für Benutzer?

Es ist seltsam. Wenn es für Benutzer sichtbar ist, können wir es dann nicht sehen? Warum können wir nicht interagieren?

Darüber hinaus wurde die Benutzeroberfläche zum Zeitpunkt von onStart noch nicht gezeichnet. Wie sollten wir diese Sichtbarkeit verstehen?

Mach ein kleines Experiment

Erstens gibt es zwei Staaten, die von der Populärwissenschaft offiziell definiert wurden.

  • Der Status zwischen onStart und onStop wird als “已开始”Status bezeichnet.
  • Der Status zwischen onResume und onPause wird als “已恢复”Status bezeichnet.

Dann haben wir ein kleines Experiment, definieren ActivityA und  ActivityB, ActivityBwie der Dialog Thema, ActivityAMittelklick auf B springen kann:

image.setOnClickListener {
        startActivity(Intent(this, ActivityB::class.java))
    }

    <activity android:name=".activity.ActivityB"
        android:theme="@style/Theme.AppCompat.Light.Dialog"
        android:launchMode="standard">
    </activity>

Klicken Sie nach Eingabe von AktivitätA auf die Schaltfläche, um zu B zu springen. Zu diesem Zeitpunkt ist der Lebenszyklus von A gekommen onPause, dh er befindet sich wieder im 已开始Status.

Zu diesem Zeitpunkt sieht die Benutzeroberfläche folgendermaßen aus:

ActivityA befindet sich im gestarteten Zustand und ist für den Benutzer sichtbar.

Es ist leicht zu verstehen, ob die Sichtbarkeit hier tatsächlich für uns sichtbar ist, aber sie steht  nicht im Vordergrund und kann nicht interagiert werden .

So gewöhnlichen erstreckt Activity, bedeutet diese Sicht nicht , dass der Benutzer sich mit dem bloßen Auge sehen kann, sondern will zum Ausdruck bringen:

ActivityEs wurde angezeigt, ist aber noch nicht vorhanden 前台, also nur 可见, aber nicht interaktiv.

Dieser sichtbare Zustand beginnt bei onStart und endet bei onStop. Wir können ihn in zwei Stufen unterteilen:

  • onStart to onResume. Zu diesem Zeitpunkt wird die Aktivität erstellt, das Layout wurde geladen, aber die Schnittstelle wurde noch nicht gezeichnet. Man kann sagen, dass die Schnittstelle nicht vorhanden ist.
  • onPause to onStop. Diese Phase ist das Experiment, das wir gerade durchgeführt haben. Die Aktivität verfügt über eine Schnittstelle, die jedoch durch die neue Schnittstelle verdeckt wird, dh nicht im Vordergrund steht.

Wenn wir also die beiden Stufen kombinieren, nennen wir diese Art von Aktivität, die erstellt oder angezeigt wird, jedoch nicht im Vordergrund, und der dazwischen liegende 可见 Zustand wird als  Zustand bezeichnet.

onStart 和 onResume

Bisher kennen wir die Bedeutung von sichtbar, tatsächlich kennen wir auch ein anderes Problem, weshalb die beiden Zustände onStart und onResume entworfen wurden.

  • onStart和onStopWird aus der Perspektive entworfen, ob die Aktivität sichtbar ist.
  • onResume和onPauseWird aus der Perspektive entworfen, ob Aktivität im Vordergrund steht.

So Activitykann der Lebenszyklus erklärt werden:

Wurde erstellt (onCreate) -> sichtbar (onStart) -> im Vordergrund (onResume) -> sichtbar, aber nicht im Vordergrund (onPause)

Sichtbarer Prozess

Aus einer anderen Perspektive kann sich diese Sichtbarkeit auf den sichtbaren Prozess beziehen  . Dies beinhaltet die Klassifizierung von Prozessen.

Um zu bestimmen, welche Prozesse beendet werden sollen, wenn der Arbeitsspeicher nicht ausreicht, werden sie von Android basierend auf den in jedem Prozess ausgeführten Komponenten und dem Status dieser Komponenten in die "Wichtigkeitshierarchie" eingeordnet. Diese Prozesstypen umfassen (in der Reihenfolge ihrer Wichtigkeit): Vordergrundprozess, sichtbarer Prozess, Serviceprozess, Cache-Prozess

Was bedeuten diese Prozesse?

  • 前台进程Dies ist der Prozess, den der Benutzer benötigt, um den aktuellen Vorgang auszuführen. Beispielsweise wird eine Aktivität auf dem interaktiven Bildschirm des Benutzers ausgeführt (die Methode onResume () wurde aufgerufen).
  • 可见进程Es ist eine Aufgabe, von der der Benutzer derzeit weiß, dass sie ausgeführt wird. Beispielsweise ist die ausgeführte Aktivität für den Benutzer auf dem Bildschirm sichtbar, jedoch nicht im Vordergrund (die Methode onPause () wurde aufgerufen).
  • 服务流程Enthält einen Dienst, der mit der Methode startService () gestartet wurde.
  • 缓存进程Es ist ein Prozess, der derzeit nicht benötigt wird. Beispiel: Eine oder mehrere Aktivitätsinstanzen, die derzeit unsichtbar sind (die Methode onStop () wurde aufgerufen und zurückgegeben).

Daher kann der Lebenszyklus der Aktivität in Prozesse unterteilt werden:

Sichtbarer Prozess (onStart) -> Vordergrundprozess (onResume) -> sichtbarer Prozess (onPause) -> Cache-Prozess (onStop)

Was nützen diese Prozesse?

Wir alle wissen, dass es im Android-System viele laufende Apps gibt, die auch unterschiedliche Prozesse darstellen.

Wenn der Speicher nicht ausreicht (einen bestimmten Schwellenwert erreicht), teilt das System der Anwendung dies zunächst über die Rückrufmethode onTrimMemory () mit, sodass die Anwendung den Speicherreduzierungsvorgang unter Bedingungen mit geringem Arbeitsspeicher ausführen kann. Wenn der Speicher danach immer noch sehr eng ist, werden einige Prozesse abgebrochen, um den Speicher freizugeben. Hier müssen wir die Priorität des Prozesses bestimmen und den Prozess beenden, um von der niedrigen Priorität auszugehen.

Daher ist hier die Klassifizierungsfunktion des Prozesses. Die Prioritätsstufe repräsentiert tatsächlich die Reihenfolge der Beendigung des Prozesses und auch den Grad der Auswirkung auf den Benutzer.

Natürlich wird im tatsächlichen Code die Prozesspriorität durch eine Zahl dargestellt, dh ADJ, und die oben erwähnten Prozesstypen haben einen entsprechenden Prozessprioritätsnummernbereich. sowie:

public final class ProcessList {
    //可见进程
    static final int VISIBLE_APP_ADJ = 100;

    // 前台进程
    static final int FOREGROUND_APP_ADJ = 0;

    // 服务进程
    static final int SERVICE_ADJ = 500;

    // 缓存进程
    static final int CACHED_APP_MIN_ADJ = 900;

    //...
}

Zurück zu unserer Frage:

Unter ihnen ist der Prozess hier zu sehen, es wurde für das Konzept sichtbar, die Erklärung lautet : 用户知晓.

Wenn wir auf eine Seite klicken, wissen wir, dass diese Seite angezeigt wird, und wir wissen auch, dass sich die vorherige Seite hinter dieser Seite befindet. Diese Seiten und Prozesse sind uns alle bekannt, stehen aber nicht im Vordergrund.

Daher onStartkann die Sichtbarkeit auch so verstanden werden 可见进程, dass die Prozessaufgabe, in der sich diese Aktivität befindet, erstellt und angezeigt wurde, und wir wissen es, aber sie steht nicht im Vordergrund.

Interaktiv

In welchem ​​Stadium findet die Interaktion statt?

Wie bereits erwähnt, wird die handleResumeActivityMethode während des Startvorgangs der Aktivität aufgerufen . Bei dieser Methode werden die onResumeMethode und die addViewMethode aufgerufen , die erste Zeichnung der Ansicht wird abgeschlossen und auf der Benutzeroberfläche angezeigt.

@Override
    public void handleResumeActivity() {
        //onResume
        final ActivityClientRecord r = performResumeActivity(token, finalStateRequest, reason);
        //addView
        if (r.window == null && !a.mFinished && willBeVisible) {
            wm.addView(decor, l);
        }
    }

Für onResume wird die Ansicht gezeichnet und im Vordergrund angezeigt.

Die offizielle Website erklärt es onResumeso:

Die Aktivität wird in den Vordergrund gerückt, wenn sie in den Zustand "wieder aufgenommen" wechselt, und das System ruft dann den Rückruf onResume () auf. Dies ist der Interaktionsstatus zwischen der App und dem Benutzer. Die Anwendung bleibt in diesem Zustand, bis ein Ereignis eintritt, sodass der Fokus weit von der Anwendung entfernt ist. Zu diesen Ereignissen gehören das Empfangen eines Anrufs, das Navigieren des Benutzers zu einer anderen Aktivität oder das Ausschalten des Gerätebildschirms.

Der interaktive Zustand sollte also onResumespäter, dh Activitysichtbar und im Vordergrund sein.

Zusammenfassung

Zusammenfassen:

onStartStatus bedeutet Activitysichtbar und sichtbar bedeutet, dass es Activityerstellt wurde und dem Benutzer bekannt ist, sich jedoch nicht im Vordergrund befindet und die Benutzeroberfläche noch nicht gezeichnet wurde, sodass keine Interaktion möglich ist. Es kann auch bedeuten, dass der Prozess, in dem es sich befindet, ein sichtbarer Prozess ist.

Seine Bedeutung sollte zusammen gesehen und onStopverwendet werden, dh onStartbis zu onStopdiesem Stadium wird das  sichtbare  Stadium genannt.

Die eigentliche Anzeige kann später interagiert werden onResume, dh wenn die Ansicht gezeichnet wird und im Vordergrund steht.

Bereiten Sie sich vor dem Interview auf das Interview vor!

Als Nächstes teile ich eine Überprüfungsroute für das Interview mit. Wenn Sie sich ebenfalls auf ein Interview vorbereiten, aber nicht wissen, wie Sie effizient überprüfen können, können Sie sich auf meine Überprüfungsroute beziehen. Wenn Sie Fragen haben, können Sie sich gerne an uns wenden einander. Komm schon!

Hier ist eine Richtung, in der jeder systematisch lernen kann:

1. Sehen Sie sich das Video zum systematischen Lernen an

Die Erfahrung von Crud in den letzten Jahren hat mir klar gemacht, dass ich wirklich ein Kämpfer im Rookie bin. Auch wegen Crud ist meine Technologie relativ fragmentiert und nicht tief genug, um systematisch zu sein, daher ist es notwendig wieder zu lernen. Was mir fehlt, ist das Systemwissen, der schlechte strukturelle Rahmen und das Denken, so dass das Lernen durch Videos besser und umfassender ist. In Bezug auf das Lernen von Videos können Einzelpersonen empfehlen, an Station B zu lernen. Auf Station B gibt es viele Lernvideos. Der einzige Nachteil ist, dass sie kostenlos und leicht veraltet sind.

Außerdem habe ich selbst mehrere Videos gesammelt und kann sie bei Bedarf mit Ihnen teilen.

2. Systematisch Wissen aussortieren und Reserven verbessern

Es gibt so viele Wissenspunkte in der Kundenentwicklung und es gibt immer noch so kleine Dinge im Interview. Daher gibt es keine anderen Tricks für das Interview. Sehen Sie sich nur an, wie gut Sie sich auf diese Wissenspunkte vorbereiten. Wenn Sie also ein Interview führen, ist es gut zu sehen, welche Phase Sie überprüft haben.

Systemlernrichtung:

  • Grundlegende Fähigkeiten für Architekten, um Grundlagen zu schaffen: ausführliche Java-Generika + Anmerkungen in einfacher Sprache + gleichzeitige Programmierung + Datenübertragung und Serialisierung + Java Virtual Machine-Prinzipien + Reflexion und Laden von Klassen + dynamischer Proxy + effiziente E / A.

  • Erweiterte Android-Benutzeroberfläche und FrameWork-Quellcode: Erweiterte Benutzeroberfläche-Promotion + Framework-Kernel-Analyse + Android-Komponenten-Kernel + Datenpersistenz

  • 360 ° Gesamtleistungsoptimierung : Designideen und Optimierung der Codequalität + Optimierung der Programmleistung + Optimierung der Entwicklungseffizienz

  • Interpretation von Open-Source-Framework-Design-Ideen: Hot-Repair-Design + Plug-In-Framework-Interpretation + Komponenten-Framework-Design + Image-Loading-Framework + Netzwerkzugriffs-Framework-Design + RXJava-Responsive-Programming-Framework-Design + IOC-Architekturdesign + Android-Architekturkomponente Jetpack

  • NDK-Modulentwicklung: NDK-Grundwissenssystem + zugrunde liegende Bildverarbeitung + Audio- und Videoentwicklung

  • WeChat Mini-Programm: Einführung in das Mini-Programm + UI-Entwicklung + API-Betrieb + WeChat-Docking

  • Hybride Entwicklung und Flattern: HTML5-Projektkampf + Flattern fortgeschritten

Nachdem das Wissen aussortiert wurde, müssen die offenen Stellen überprüft und ausgefüllt werden. Daher habe ich für diese Wissenspunkte viele E-Books und Notizen vorbereitet. Diese Notizen bieten eine perfekte Zusammenfassung jedes Wissenspunkts.

3. Lesen Sie den Quellcode, lesen Sie die tatsächlichen Kampfnotizen und lernen Sie die Ideen Gottes

"Programmiersprache ist die Art und Weise, wie der Programmierer sie ausdrückt, und die Architektur ist die Erkenntnis des Programmierers über die Welt." Wenn Programmierer die Architektur schnell verstehen und lernen möchten, ist das Lesen des Quellcodes daher unerlässlich. Das Lesen des Quellcodes dient dazu, Probleme zu lösen + Dinge zu verstehen und vor allem: die Ideen hinter dem Quellcode zu erkennen; Programmierer sagen: Lesen Sie zehntausend Zeilen Quellcode und üben Sie zehntausend Arten von Übungen.

Enthält hauptsächlich WeChat MMKV-Quellcode, AsyncTask-Quellcode, Volley-Quellcode, Nachrüst-Quellcode, OkHttp-Quellcode usw.

4. Machen Sie am Vorabend des Interviews einen Sprint

Innerhalb einer Woche vor dem Interview können Sie mit dem Sprinten beginnen. Bitte denken Sie daran, dass beim Bürsten der Fragen die Technologie oberste Priorität hat und der Algorithmus grundlegend ist, wie z. B. Sortieren usw., und dass die intellektuellen Fragen im Allgemeinen nicht gestellt werden, es sei denn, es handelt sich um Schulrekruten.

In Bezug auf die Interviewfragen habe ich persönlich eine Reihe systematischer Interviewfragen vorbereitet, damit Sie voneinander lernen können:

Es gibt auch eine Reihe von Android-Lernressourcen, deren Organisation mehr als ein Jahr gedauert hat: Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记Warten Sie.

Der obige Inhalt kann kostenlos mit allen geteilt werden, Freunden, die die Vollversion benötigen. Klicken Sie hier, um den gesamten Inhalt anzuzeigen . Oder klicken Sie [ hier ], um zu sehen, wie Sie es bekommen.

Ich denke du magst

Origin blog.csdn.net/YoungOne2333/article/details/115337047
Empfohlen
Rangfolge