Comme nous le soaps tous, de nombreuses applications Android affichent un écran blanc très brièvement avant que leur première Activity
soit mise au point. Ce problème est observé dans les cas suivants:
Applications Android qui étendent la classe Application
globale et y effectuent des initialisations majeures. L’object Application
est toujours créé avant la première Activity
(ce qui peut être observé dans le débogueur), cela a donc un sens. C’est la cause du retard dans mon cas.
Applications Android qui affichent la fenêtre de prévisualisation par défaut avant l’écran de démarrage.
Définir 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 sur Theme.Holo.NoActionBar
comme décrit ici , car [malheureusement] mon écran de démarrage utilise un ActionBar
.
Pendant ce temps, les applications qui ne prolongent pas la classe Application
ne montrent pas l’écran blanc au démarrage.
Le fait est que, idéalement, les initialisations effectuées dans l’object Application
doivent avoir lieu avant que la première Activity
soit affichée. Donc, ma question est, comment puis-je effectuer ces initialisations au démarrage de l’application sans utiliser un object Application
? Peut-être utiliser un Thread
ou un Service
, je suppose?
C’est un problème intéressant à considérer. Je ne peux pas le contourner de la manière habituelle (en définissant le thème NoActionBar
), car mon écran Splash a ActionBar
un ActionBar
pour des raisons indépendantes.
Remarque:
J’ai déjà évoqué les questions suivantes:
Comment réparer un écran blanc sur une application?
Écran de démarrage Android est blanc au début?
Écran blanc avant écran de démarrage
Fond blanc lorsque l’application Android démarre
Pourquoi un écran blanc apparaît-il pendant 1 seconde lors du démarrage des applications sous Android?
Les références:
Patterns – Lance les écrans .
Ecran de lancement de marque: le nouveau splash pour Android .
Splash Screens de la bonne façon .
Le problème avec le fond blanc est dû au démarrage à froid d’androïde pendant que l’application se charge en mémoire, et cela peut être évité avec ceci:
public class OnboardingWithCenterAnimationActivity extends AppCompatActivity { public static final int STARTUP_DELAY = 300; public static final int ANIM_ITEM_DURATION = 1000; public static final int ITEM_DELAY = 300; private boolean animationStarted = false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { setTheme(R.style.AppTheme); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); super.onCreate(savedInstanceState); setContentView(R.layout.activity_onboarding_center); } @Override public void onWindowFocusChanged(boolean hasFocus) { if (!hasFocus || animationStarted) { return; } animate(); super.onWindowFocusChanged(hasFocus); } private void animate() { ImageView logoImageView = (ImageView) findViewById(R.id.img_logo); ViewGroup container = (ViewGroup) findViewById(R.id.container); ViewCompat.animate(logoImageView) .translationY(-250) .setStartDelay(STARTUP_DELAY) .setDuration(ANIM_ITEM_DURATION).setInterpolator( new DecelerateInterpolator(1.2f)).start(); for (int i = 0; i < container.getChildCount(); i++) { View v = container.getChildAt(i); ViewPropertyAnimatorCompat viewAnimator; if (!(v instanceof Button)) { viewAnimator = ViewCompat.animate(v) .translationY(50).alpha(1) .setStartDelay((ITEM_DELAY * i) + 500) .setDuration(1000); } else { viewAnimator = ViewCompat.animate(v) .scaleY(1).scaleX(1) .setStartDelay((ITEM_DELAY * i) + 500) .setDuration(500); } viewAnimator.setInterpolator(new DecelerateInterpolator()).start(); } } }
disposition
img face
-
Ajouter ce thème à votre écran d'introduction dans le manifeste
qui produira efect comme ça
pour plus de détails et plus de solutions, vous pouvez consulter ce blog
veuillez append cette ligne dans votre thème d’application
- true
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 transférez tout travail lourd lorsque vous avez le temps de l’exécuter. Publiez votre classe de candidature ici si vous souhaitez que nous y jetions un coup d’oeil.
Veuillez copier et coller ces deux lignes dans votre thème d’application manifeste, à savoir res / styles / AppTheme. alors ça marchera comme du charme ..
- true
- true
Avez-vous essayé de définir l’atsortingbut android:windowBackground
dans le thème de votre activité de lanceur, sur une couleur ou sur un dessin?
Par exemple ceci:
- @android:color/black
Lorsqu’elle est ajoutée au thème d’activité Lanceur, une couleur noire (plutôt que blanche) apparaît au démarrage. C’est une astuce facile pour cacher une longue initialisation, tout en montrant quelque chose à vos utilisateurs, et cela fonctionne très bien même si vous sous-classe l’object 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 ces constructions. L’object Application est l’endroit approprié pour effectuer exactement ce type d’actions.
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é. Rappelez-vous que la façon dont Android est conçu, il existe un cycle de vie pour chaque application. Si vous mettez trop de charge sur la méthode onCreate()
(qui est la méthode utilisée pour charger les fichiers de mise en page et initaliser les commandes que vous avez), alors l’écran blanc deviendra plus visible, car le fichier de mise en page prendra plus de temps pour charge.
Je suggère d’utiliser plusieurs méthodes différentes lors du démarrage d’une activité. Tels sont le onStart()
(appelé en premier lieu une fois l’application chargée), onActivityCreated()
(appelé après l’affichage de la présentation 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 du cycle de vie officiel de l’activité:
J’ai eu le même problème, vous devez mettre à jour votre style.
style.xml
Votre fichier de manifeste doit ressembler à ci-dessous.
// Other stuff
Dehors:
J’espère que cela vous aidera.
Les deux propriétés fonctionnent
Avez-vous essayé de mettre l’initialisation sur onActivityCreated
?
Classe d’ Application
interne:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { if(activity.getClass().equals(FirstActivity.class) { // try without runOnUiThread if it will not help activity.runOnUiThread(new Runnable() { @Override public void run() { new InitializatioTask().execute(); } }); } } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } });
Comme vous savez déjà pourquoi cet écran blanc est là, en raison des processus d’arrière-plan ou de l’initialisation de l’application ou des fichiers volumineux, vérifiez simplement ci-dessous l’idée de surmonter cela.
Pour éviter que cet écran blanc au début de l’application ne soit un écran de démarrage, c’est juste une façon non finale et vous devez l’utiliser.
Lorsque vous afficherez l’écran de démarrage à partir de votre fichier splash.xml, alors ce problème restra le même,
Vous devez donc créer un style dans le fichier style.xml pour l’écran d’accueil et définir le fond de la fenêtre en tant que votre image de démarrage, puis appliquer ce thème à votre activité de démarrage à partir d’un 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 manière recommandée de résoudre ce problème manque dans les réponses. Donc j’ajoute ma réponse ici. Le problème de l’écran blanc au démarrage se produit à cause de l’écran vierge initial que le processus du système dessine lors du lancement de l’application. Un moyen courant de résoudre ce problème est de désactiver cet écran initial en l’ajoutant à votre fichier styles.xml
.
- true
Mais selon la documentation Android, cela peut entraîner un temps de démarrage plus long. La méthode recommandée pour éviter cet écran blanc initial selon Google consiste à utiliser l’ windowBackground
thème windowBackground
l’activité et à fournir un simple dessin personnalisé pour l’activité de démarrage.
Comme ça:
Fichier de mise en page my_drawable.xml
, my_drawable.xml
-
Créez un nouveau style dans votre styles.xml
Ajoutez ce thème à votre activité de départ dans le fichier manifeste
Et lorsque vous souhaitez revenir à votre appel de thème normal setTheme(R.style.Apptheme)
avant d’appeler super.onCreate()
et setContentView()
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.Theme_MyApp); super.onCreate(savedInstanceState); // ... } }
C’est la manière recommandée de résoudre le problème et c’est à partir des modèles de conception de matériel de google.
Écrivez simplement l’élément dans values / styles.xml:
- @android:color/black
Par exemple, dans AppTheme:
Je recommanderais de jeter un oeil à la réponse donnée à cette page . Résolu en utilisant la propriété Style. Cela ne dérange pas l’utilisateur.
Style :- In Manifest :-