3 Stimmen

Hauptaktivitätsstartverzögerung

Wenn ich meine Aktivität starte, bemerke ich eine kurze Verzögerung. Ich klicke auf das App-Symbol und der Startbildschirm bleibt etwa 1-1,5 Sekunden auf dem Bildschirm, bevor meine Aktivität angezeigt wird.

Die onCreate-Methode meiner Aktivität dauert etwa 800 ms, um abzuschließen.

Ich habe auch festgestellt, dass die Einstellung android:screenOrientation="landscape" ebenfalls eine spürbare Verzögerung verursacht, selbst wenn ich eine Testaktivität mit einem leeren Layout verwende.

Gibt es eine Möglichkeit, diese Verzögerung loszuwerden oder zumindest einen schwarzen Bildschirm anzuzeigen, während die Benutzeroberfläche geladen wird?

Bearbeitet: Siehe unten Code für Testaktivität. In meiner echten Aktivität gibt es noch eine Menge anderer Ladevorgänge einschließlich GUI-Elementen und Engine-Logik, Sound usw. Das eigentliche Problem ist, dass die Verzögerung auch bei Verwendung dieser kleinen Testaktivität sichtbar ist.


Code für Testaktivität:

public class TestActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Vollbildmodus einstellen und 
        // den Sperrbildschirm deaktivieren
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN  
                             | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
                             | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                             | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        setContentView(R.layout.main);
    }
}

Layout-XML:

Manifest:

2voto

Drake Clarris Punkte 1049

Du könntest die Standardaktivität auf eine nahezu leere Aktivität setzen, die nichts weiter tut, als einen Hintergrund anzuzeigen und deine eigentliche Aktivität zu starten... wie ein Begrüßungsbildschirm

0voto

Gem Punkte 1466

Die Antwort, die Ans Drake gegeben hat, ist perfekt, aber um sie zu erweitern - lassen Sie uns annehmen, Sie möchten, dass Ihr benutzerdefiniertes Splash-Screen-Bild die ganze Zeit sichtbar ist. Wenn wir dem Fenster Farbe zuweisen, erfolgt ein Wechsel von Farbe zum tatsächlichen Splash-Screen. Dies könnte eine schlechte Benutzererfahrung sein. Der Vorschlag, den ich mache, erfordert nicht setContentView, sondern verwaltet das Splash-Screen nur über das Theme.

Wir können das Theme in Java nicht festlegen, da in meinem Fall die Steuerung erst sehr spät in onCreate meiner Splash-Aktivität ankommt. Bis zu diesem Zeitpunkt bleibt der schwarze Bildschirm sichtbar.

Dies gab mir die Idee, dass das Fenster vom Theme aus verwaltet werden muss, das wir im Manifest angeben.

Hier ist das Manifest, das ich habe:

Jetzt ist das Theme, das ich erstellt habe, folgendermaßen:

    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/green_09</item>
    <item name="colorPrimary">@color/green_09</item>
    <item name="windowActionBar">false</item>

Das Splash in der drawable-Ressource enthält eine Bitmap-Ressource. Ich musste ein wenig optimieren, um es perfekt aussehen zu lassen, nicht gestreckt und in der Mitte:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X