Comme nous le savons tous, de nombreuses applications Android affichent un écran blanc très brièvement avant leur première Activity
mise au point. Ce problème est observé dans les cas suivants:
Applications Android qui étendent la
Application
classe globale et y effectuent des initialisations majeures. L'Application
objet est toujours créé avant le premierActivity
(un fait qui peut être observé dans le débogueur), donc cela a du sens. C'est la cause du retard dans mon cas.Applications Android qui affichent la fenêtre d'aperçu par défaut avant l'écran de démarrage.
Le réglage android:windowDisablePreview = "true"
ne fonctionne évidemment pas ici. Je ne peux pas non plus définir le thème parent de l'écran de démarrage Theme.Holo.NoActionBar
comme décrit ici , car [malheureusement] mon écran de démarrage utilise un fichier ActionBar
.
Pendant ce temps, les applications qui n'étendent pas la Application
classe n'affichent pas l'écran blanc au démarrage.
Le fait est que, idéalement, les initialisations effectuées dans l' Application
objet doivent se produire avant que la première ne Activity
soit affichée. Ma question est donc la suivante: comment puis-je effectuer ces initialisations au démarrage de l'application sans utiliser d' Application
objet? Peut-être en utilisant un Thread
ou Service
, je suppose?
C'est un problème intéressant auquel réfléchir. Je ne peux pas le contourner de la manière habituelle (en définissant le NoActionBar
thème), car tragiquement mon écran Splash a en fait une ActionBar
raison pour des raisons indépendantes.
Remarque:
J'ai déjà évoqué les questions suivantes:
Références:
Application
classe. Cela est dû aux nouvelles versions de la manière d'Android de "démarrer à froid" les applications. Google a en fait abordé les heures de lancement à Google I / O cette année et cela sera corrigé en N d'après ce dont je me souviens. En attendant, vous devriez regarder ce que Google appelle un "écran de lancement de marque". Voici un exemple sur la façon de le créer: antonioleiva.com/branded-launch-screen - plus d'écran blanc au début ;-) Et n'utilisez pas d'écrans de démarrage - c'est ennuyeux pour l'utilisateur.Réponses:
Le problème avec le fond blanc est dû au démarrage à froid d'Android pendant le chargement de l'application en mémoire, et il peut être évité avec ceci:
disposition
visage img
Ajoutez ce thème à votre écran de démarrage dans le manifeste
qui produira un effet comme celui-ci
pour plus de détails et plus de solutions, vous pouvez consulter ce BlogPost
la source
veuillez ajouter cette ligne dans le thème de votre application
pour plus d'informations: https://developer.android.com/topic/performance/vitals/launch-time#themed
la source
Veuillez copier et coller ces deux lignes dans votre thème d'application manifeste, c'est-à-dire res / styles / AppTheme. alors ça fonctionnera comme du charme ..
la source
Tout d'abord, pour supprimer l'écran blanc, lisez ceci - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Mais plus important encore, optimisez votre charge initiale et reportez tout travail lourd au moment où vous avez le temps de l'exécuter. Publiez votre classe d'application ici si vous souhaitez que nous l'examinions.
la source
La méthode recommandée pour résoudre ce problème est absente des réponses. J'ajoute donc ma réponse ici. Le problème de l'écran blanc au démarrage se produit en raison de l'écran vide initial que le processus système dessine lors du lancement de l'application. Une façon courante de résoudre ce problème consiste à désactiver cet écran initial en l'ajoutant à votre
styles.xml
fichier.Mais selon la documentation Android, cela peut entraîner un temps de démarrage plus long. Selon Google, la méthode recommandée pour éviter cet écran blanc initial est d'utiliser l'
windowBackground
attribut de thème de l'activité et de fournir un dessin personnalisé simple pour l'activité de départ.Comme ça:
Fichier de mise en page dessinable,
my_drawable.xml
Créez un nouveau style dans votre
styles.xml
Ajoutez ce thème à votre activité de départ dans le fichier Manifest
Et lorsque vous souhaitez revenir à votre appel de thème normal
setTheme(R.style.Apptheme)
avant d'appelersuper.onCreate()
etsetContentView()
C'est la méthode recommandée pour résoudre le problème et cela provient des modèles de conception de matériaux de Google .
la source
Avez-vous essayé de définir l'
android:windowBackground
attribut dans le thème de votre activité de lancement, soit sur une couleur, soit sur un dessin?Par exemple ceci:
lorsqu'il est ajouté au thème d'activité du lanceur, une couleur noire (plutôt que blanche) s'affiche au démarrage. C'est une astuce facile pour masquer une longue initialisation, tout en montrant quelque chose à vos utilisateurs, et cela fonctionne bien même si vous sous-classez l'objet Application.
Évitez d'utiliser d'autres constructions (même des threads) pour effectuer de longues tâches d'initialisation, car vous risquez de ne pas pouvoir contrôler le cycle de vie de telles constructions. L'objet Application est le bon endroit pour effectuer exactement ce type d'actions.
la source
J'ai ajouté les deux lignes suivantes dans mon thème sous styles.xml
A travaillé comme un charme
la source
J'ai eu le même problème, vous devez mettre à jour votre style.
style.xml
Votre fichier manifeste devrait ressembler à ci-dessous.
Dehors:
J'espère que cela vous aidera.
la source
Dans les méthodes de rappel du cycle de vie, vous pouvez déclarer le comportement de votre activité lorsque l'utilisateur quitte et réintègre l'activité. N'oubliez pas que la façon dont Android est conçu, il y a un cycle de vie pour chaque application. Si vous mettez trop de charge à la
onCreate()
méthode (qui est la méthode utilisée pour charger les fichiers de mise en page et initialiser tous les contrôles que vous y avez), l'écran blanc deviendra plus visible, car le fichier de mise en page prendra plus de temps à charger.Je suggère d'utiliser plusieurs méthodes différentes lors du démarrage d'une activité. Tels sont les
onStart()
(étant appelé en premier lieu une fois l'application chargée),onActivityCreated()
(étant appelé après l'affichage de la mise en page et utile si vous effectuez un traitement de données au démarrage de l'activité).Pour vous faciliter la tâche, vous trouverez ci-dessous le diagramme officiel du cycle de vie des activités:
la source
Activity
, mais par celles de l'Application
objet global . Et je ne crois pas que je puisse appliquer une telle séparation des préoccupations là-bas, car contrairement à une,Activity
elle n'a qu'uneonCreate()
méthode.Application
complètement l' objet et déplacer tout le code d'initialisation vers le premierActivity
...Avez-vous essayé de mettre l'initialisation
onActivityCreated
?À l'intérieur de la
Application
classe:la source
Comme vous savez déjà pourquoi cet écran blanc est là, en raison des processus d'arrière-plan, de l'initialisation de l'application ou de fichiers volumineux, il suffit donc de vérifier ci-dessous l'idée pour surmonter cela.
Pour éviter cet écran blanc au début de l'application, un écran de démarrage est un moyen, ce n'est qu'un moyen non définitif et vous devez utiliser.
Lorsque vous afficherez l'écran de démarrage de votre fichier splash.xml, ce problème restera également le même,
Vous devez donc créer un style ont dans le fichier style.xml pour l'écran de démarrage et là, vous devez définir l'arrière-plan de la fenêtre comme image de démarrage, puis appliquer ce thème à votre activité de démarrage à partir du fichier manifeste. Alors maintenant, lorsque vous exécuterez l'application, elle définira d'abord le thème et, de cette manière, l'utilisateur pourra voir directement l'image de démarrage au lieu de l'écran blanc.
la source
Les deux propriétés fonctionnent
la source
Veuillez essayer ceci une fois.
1) Créez un fichier dessinable splash_background.xml
2) Mettez ceci dans styles.xml
3) Dans votre AndroidMainfest.xml, définissez le thème ci-dessus sur Lancer l'activité.
la source
Écrivez simplement l'élément dans values / styles.xml:
Par exemple, dans l'AppTheme:
la source
la source
Pour toute personne ayant cet écran blanc lors du débogage, sachez que si vous déboguez, le chargement prendra plus de temps. Si vous créez votre APK de version et l'installez sur votre téléphone, vous remarquerez que le chargement prend beaucoup moins de temps.
Ainsi, le temps de démarrage avec la version de débogage n'est pas égal au temps de démarrage avec la version commerciale.
la source