Wie wir alle wissen, zeigen viele Android-Apps sehr kurz einen weißen Bildschirm an, bevor sie zum ersten Mal Activity
in den Fokus rücken. Dieses Problem tritt in folgenden Fällen auf:
Android-Apps, die die globale
Application
Klasse erweitern und wichtige Initialisierungen durchführen. DasApplication
Objekt wird immer vor dem ersten erstelltActivity
(eine Tatsache, die im Debugger beobachtet werden kann), daher ist dies sinnvoll. Dies ist die Ursache für die Verzögerung in meinem Fall.Android-Apps, die das Standardvorschaufenster vor dem Begrüßungsbildschirm anzeigen.
Die Einstellung android:windowDisablePreview = "true"
funktioniert hier offensichtlich nicht. Ich kann das übergeordnete Thema des Begrüßungsbildschirms auch nicht Theme.Holo.NoActionBar
wie hier beschrieben einstellen , da mein Begrüßungsbildschirm [leider] ein verwendet ActionBar
.
Währenddessen wird bei Apps, die die Application
Klasse nicht erweitern , beim Start kein weißer Bildschirm angezeigt.
Die Sache ist, idealerweise müssen die im Application
Objekt durchgeführten Initialisierungen erfolgen, bevor die erste Activity
angezeigt wird. Meine Frage ist also, wie ich diese Initialisierungen beim Start der App durchführen kann, ohne ein Application
Objekt zu verwenden. Möglicherweise mit einem Thread
oder Service
, nehme ich an?
Dies ist ein interessantes Problem. Ich kann es nicht auf die übliche Weise umgehen (indem ich das NoActionBar
Thema einstelle ), da mein Begrüßungsbildschirm tragischerweise aus ActionBar
nicht verwandten Gründen tatsächlich einen hat .
Hinweis:
Ich habe bereits folgende Fragen angesprochen:
Verweise:
Application
Klasse entfernt haben. Dies ist auf neuere Versionen von Android zurückzuführen, mit denen die Apps "kalt gestartet" werden. Google hat sich dieses Jahr tatsächlich mit den Startzeiten bei Google I / O befasst und wird, soweit ich mich erinnere, in N festgelegt. In der Zwischenzeit sollten Sie sich ansehen, was Google als "Marken-Startbildschirm" bezeichnet. Hier ist ein Beispiel, wie man es erstellt: antonioleiva.com/branded-launch-screen - am Anfang kein weißer Bildschirm mehr ;-) Und bitte verwenden Sie keine Begrüßungsbildschirme - es ist für den Benutzer ärgerlich.Antworten:
Das Problem mit dem weißen Hintergrund wird durch den Kaltstart von Android verursacht, während die App in den Speicher geladen wird, und kann folgendermaßen vermieden werden:
Layout
img Gesicht
Fügen Sie dieses Thema Ihrem Begrüßungsbildschirm im Manifest hinzu
was zu einem solchen Effekt führen wird
Weitere Details und Lösungen finden Sie in diesem BlogPost
quelle
Bitte fügen Sie diese Zeile in Ihr App-Thema ein
Weitere Informationen: https://developer.android.com/topic/performance/vitals/launch-time#themed
quelle
Bitte kopieren Sie diese beiden Zeilen und fügen Sie sie in Ihr Manifest-App-Thema ein, dh res / styles / AppTheme. dann wird es wie Charme funktionieren ..
quelle
Um den weißen Bildschirm zu entfernen, lesen Sie zunächst Folgendes: https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Noch wichtiger ist jedoch, dass Sie Ihre anfängliche Last optimieren und jede schwere Arbeit auf den Zeitpunkt verschieben, an dem Sie Zeit haben, sie auszuführen. Veröffentlichen Sie Ihre Bewerbungsklasse hier, wenn Sie möchten, dass wir sie uns ansehen.
quelle
Die empfohlene Methode zur Lösung dieses Problems fehlt in den Antworten. Also füge ich hier meine Antwort hinzu. Das Problem mit dem weißen Bildschirm beim Start tritt aufgrund des anfänglichen leeren Bildschirms auf, den der Systemprozess beim Starten der App zeichnet. Ein üblicher Weg, dies zu lösen, besteht darin, diesen Startbildschirm auszuschalten, indem Sie ihn Ihrer
styles.xml
Datei hinzufügen .Laut Android-Dokumentation kann dies jedoch zu einer längeren Startzeit führen. Die empfohlene Möglichkeit, diesen anfänglichen weißen Bildschirm gemäß Google zu vermeiden, besteht darin, das
windowBackground
Themenattribut der Aktivität zu verwenden und eine einfache benutzerdefinierte Zeichnung für die Startaktivität bereitzustellen.So was:
Zeichnungsfähige Layoutdatei,
my_drawable.xml
Erstellen Sie einen neuen Stil in Ihrem
styles.xml
Fügen Sie dieses Thema zu Ihrer Startaktivität in der Manifest-Datei hinzu
Und wenn Sie zu Ihrem normalen Themenanruf zurückkehren möchten,
setTheme(R.style.Apptheme)
bevor Siesuper.onCreate()
und anrufensetContentView()
Dies ist der empfohlene Weg, um das Problem zu lösen. Dies basiert auf Google Material Design- Mustern.
quelle
Haben Sie versucht, das
android:windowBackground
Attribut im Thema Ihrer Launcher-Aktivität entweder auf eine Farbe oder auf eine Zeichenfunktion festzulegen?Zum Beispiel dies:
Wenn es zum Launcher-Aktivitätsthema hinzugefügt wird, wird beim Start eine schwarze Farbe (anstelle der weißen Farbe) angezeigt. Dies ist ein einfacher Trick, um lange Initialisierungen zu verbergen und gleichzeitig Ihren Benutzern etwas anzuzeigen. Er funktioniert auch dann, wenn Sie das Anwendungsobjekt in Unterklassen unterteilen.
Vermeiden Sie die Verwendung anderer Konstrukte (auch Threads) für lange Initialisierungsaufgaben, da Sie möglicherweise den Lebenszyklus solcher Konstrukte nicht steuern können. Das Anwendungsobjekt ist der richtige Ort, um genau diese Art von Aktionen auszuführen.
quelle
Ich habe die folgenden zwei Zeilen in mein Thema unter styles.xml eingefügt
Lief wie am Schnürchen
quelle
Ich hatte das gleiche Problem, Sie müssen Ihren Stil aktualisieren.
style.xml
Ihre Manifestdatei sollte wie folgt aussehen.
Raus:
Hoffe das würde dir helfen.
quelle
Innerhalb der Lifecycle-Callback-Methoden können Sie festlegen, wie sich Ihre Aktivität verhält, wenn der Benutzer die Aktivität verlässt und erneut betritt. Denken Sie daran, dass bei der Gestaltung von Android für jede App ein Lebenszyklus vorhanden ist. Wenn Sie die
onCreate()
Methode zu stark laden (diese Methode wird zum Laden der Layoutdateien und zum Initialisieren aller darin enthaltenen Steuerelemente verwendet), wird der weiße Bildschirm besser sichtbar, da das Laden der Layoutdatei länger dauert.Ich schlage vor, beim Starten einer Aktivität verschiedene Methoden anzuwenden. Dies sind die
onStart()
(werden als erstes aufgerufen, sobald die App geladen ist)onActivityCreated()
(werden aufgerufen, nachdem das Layout angezeigt wurde, und nützlich, wenn Sie beim Starten der Aktivität eine Datenverarbeitung durchführen).Um es Ihnen einfacher zu machen, finden Sie unten das offizielle Diagramm des Aktivitätslebenszyklus:
quelle
Activity
, sondern durch die im globalenApplication
Objekt verursacht. Und ich glaube nicht, dass ich dort eine solche Trennung von Bedenken anwenden kann, weil es im Gegensatz zu einerActivity
nur eineonCreate()
Methode gibt.Application
Objekt ganz aufgeben und den gesamten Initialisierungscode auf den ersten verschiebenActivity
...Haben Sie versucht, die Initialisierung durchzuführen
onActivityCreated
?Innerhalb der
Application
Klasse:quelle
Da Sie bereits wissen, warum dieser weiße Bildschirm aufgrund von Hintergrundprozessen oder Anwendungsinitialisierung oder großen Dateien vorhanden ist, überprüfen Sie einfach die folgende Idee, um diese zu überwinden.
Um diesen weißen Bildschirm zu Beginn der App zu verhindern, ist ein Weg der Begrüßungsbildschirm. Dies ist nur ein Weg, der nicht endgültig ist und den Sie verwenden müssen.
Wenn Sie den Begrüßungsbildschirm aus Ihrer Datei splash.xml anzeigen, bleibt auch dieses Problem gleich.
Sie müssen also einen ont-Stil in der Datei style.xml für den Begrüßungsbildschirm erstellen und dort den Fensterhintergrund als Begrüßungsbild festlegen und dieses Thema dann aus der Manifestdatei auf Ihre Begrüßungsaktivität anwenden. Wenn Sie nun die App ausführen, wird zuerst das Thema festgelegt, und auf diese Weise kann der Benutzer direkt das Begrüßungsbild anstelle des weißen Bildschirms sehen.
quelle
Beide Eigenschaften funktionieren
quelle
Bitte versuchen Sie dies einmal.
1) Erstellen Sie eine zeichnbare Datei splash_background.xml
2) Fügen Sie dies in styles.xml ein
3) Stellen Sie in Ihrer AndroidMainfest.xml das obige Thema auf Aktivität starten ein.
quelle
Schreiben Sie das Element einfach in values / styles.xml:
Zum Beispiel im AppTheme:
quelle
quelle
Wenn Sie diesen weißen Bildschirm während des Debuggens haben, beachten Sie, dass das Laden beim Debbug länger dauert. Wenn Sie die Release-APK erstellen und auf Ihrem Telefon installieren, werden Sie feststellen, dass das Laden viel weniger dauert.
Die Startzeit mit der Debbug-Version entspricht also nicht der Startzeit mit der Release-Version.
quelle