Como todos sabemos, muchas aplicaciones de Android muestran una pantalla en blanco muy brevemente antes de que Activity
se enfoque la primera . Este problema se observa en los siguientes casos:
Aplicaciones de Android que amplían la
Application
clase global y realizan importantes inicializaciones en ella. ElApplication
objeto siempre se crea antes que el primeroActivity
(hecho que se puede observar en el depurador), por lo que esto tiene sentido. Esta es la causa del retraso en mi caso.Aplicaciones de Android que muestran la ventana de vista previa predeterminada antes de la pantalla de presentación.
La configuración android:windowDisablePreview = "true"
obviamente no funciona aquí. Tampoco puedo configurar el tema principal de la pantalla de inicio Theme.Holo.NoActionBar
como se describe aquí , porque [desafortunadamente] mi pantalla de inicio utiliza un archivo ActionBar
.
Mientras tanto, las aplicaciones que no amplían la Application
clase no muestran la pantalla blanca al inicio.
La cuestión es que, idealmente, las inicializaciones realizadas en el Application
objeto deben ocurrir antes de queActivity
se muestre la primera . Entonces, mi pregunta es, ¿cómo puedo realizar estas inicializaciones al iniciar la aplicación sin usar un Application
objeto? Posiblemente usando un Thread
o Service
, supongo.
Este es un problema interesante en el que pensar. No puedo omitirlo de la forma habitual (configurando el NoActionBar
tema), ya que, trágicamente, mi pantalla de bienvenida tiene un efecto ActionBar
debido a algunas razones no relacionadas.
Nota:
Ya me he referido a las siguientes preguntas:
Referencias:
Application
clase. Esto se debe a las versiones más recientes de la forma de Android de "iniciar en frío" las aplicaciones. Google realmente abordó los tiempos de lanzamiento en Google I / O este año y se arreglará en N según lo que recuerdo. Mientras tanto, debería mirar lo que Google llama una "pantalla de inicio de marca". Aquí hay un ejemplo sobre cómo crearlo: antonioleiva.com/branded-launch-screen - no más pantalla en blanco al principio ;-) Y por favor no use pantallas de bienvenida - es molesto para el usuario.Respuestas:
El problema con el fondo blanco se debe al inicio en frío de Android mientras la aplicación se carga en la memoria, y se puede evitar con esto:
diseño
img cara
Agregue este tema a su pantalla de presentación en el manifiesto
que producirá un efecto como este
Para obtener más detalles y más soluciones, puede consultar este BlogPost
fuente
por favor agregue esta línea al tema de su aplicación
para obtener más información: https://developer.android.com/topic/performance/vitals/launch-time#themed
fuente
Copie y pegue estas dos líneas en el tema de su aplicación de manifiesto, es decir, res / styles / AppTheme. entonces funcionará a las mil maravillas.
fuente
En primer lugar, para eliminar la pantalla blanca, lea esto: https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Pero, lo que es más importante, optimice su carga inicial y posponga cualquier trabajo pesado para cuando tenga tiempo de ejecutarlo. Publique su clase de solicitud aquí si desea que la analicemos.
fuente
La forma recomendada de resolver este problema falta en las respuestas. Entonces estoy agregando mi respuesta aquí. El problema de la pantalla blanca al inicio se produce debido a la pantalla en blanco inicial que dibuja el proceso del sistema al iniciar la aplicación. Una forma común de resolver esto es apagando esta pantalla inicial agregando esto a su
styles.xml
archivo.Pero de acuerdo con la documentación de Android, esto puede resultar en un tiempo de inicio más largo. La forma recomendada de evitar esta pantalla blanca inicial según Google es utilizar el
windowBackground
atributo de tema de la actividad y proporcionar un simple dibujable personalizado para la actividad inicial.Me gusta esto:
Archivo de diseño dibujable,
my_drawable.xml
Crea un nuevo estilo en tu
styles.xml
Agregue este tema a su actividad inicial en el archivo de manifiesto
Y cuando desee volver a su llamada temática normal
setTheme(R.style.Apptheme)
antes de llamarsuper.onCreate()
ysetContentView()
Esta es la forma recomendada de resolver el problema y proviene de los patrones de Google Material Design .
fuente
¿Ha intentado establecer el
android:windowBackground
atributo en el tema de la actividad de su lanzador, ya sea en un color o en un dibujable?Por ejemplo esto:
cuando se agrega al tema de actividad del Lanzador, se mostrará un color negro (en lugar del color blanco) al inicio. Este es un truco fácil para ocultar una inicialización larga, mientras muestra algo a los usuarios, y funciona bien incluso si subclasifica el objeto Aplicación.
Evite el uso de otras construcciones (incluso subprocesos) para realizar tareas de inicialización largas, ya que puede terminar no siendo capaz de controlar el ciclo de vida de dichas construcciones. El objeto Aplicación es el lugar correcto para realizar exactamente este tipo de acciones.
fuente
Agregué las siguientes dos líneas en mi tema en styles.xml
Trabajado como un encanto
fuente
Tuve el mismo problema, tienes que actualizar tu estilo.
style.xml
Su archivo de manifiesto debería verse a continuación.
Fuera fuera:
Espero que esto te ayude.
fuente
Dentro de los métodos de devolución de llamada del ciclo de vida, puede declarar cómo se comporta su actividad cuando el usuario abandona y vuelve a ingresar a la actividad. Recuerde que la forma en que está diseñado Android, existe un ciclo de vida para todas y cada una de las aplicaciones. Si coloca demasiada carga en el
onCreate()
método (que es el método utilizado para cargar los archivos de diseño e inicializar los controles que tenga), la pantalla blanca se volverá más visible, ya que el archivo de diseño tardará más en cargarse.Sugiero utilizar varios métodos diferentes al iniciar una actividad. Tales son
onStart()
(que se llama como lo primero una vez que se carga la aplicación),onActivityCreated()
(se llama después de que se muestra el diseño y es útil si está realizando algún procesamiento de datos al iniciar la actividad).Para que le resulte más fácil, a continuación se muestra el diagrama oficial del ciclo de vida de la actividad:
fuente
Activity
, sino por las delApplication
objeto global . Y no creo que pueda aplicar tal separación de preocupaciones allí, porque a diferencia de unaActivity
, solo tiene unonCreate()
método.Application
objeto por completo y mover todo el código de inicialización al primeroActivity
...¿Intentaste poner la inicialización
onActivityCreated
?Dentro de la
Application
clase:fuente
Como ya sabe por qué esta pantalla blanca está allí, debido a procesos en segundo plano o inicialización de aplicaciones o archivos grandes, simplemente verifique la idea a continuación para superar esto.
Para evitar esta pantalla en blanco al comienzo de la aplicación, una forma es la pantalla de inicio, esta es solo una forma no final y debe tener que usarla.
Cuando muestre la pantalla de bienvenida de su archivo splash.xml, este problema seguirá siendo el mismo,
Por lo tanto, debe crear un estilo ont en el archivo style.xml para la pantalla de presentación y allí debe establecer el fondo de la ventana como su imagen de presentación y luego aplicar ese tema a su actividad de presentación desde el archivo de manifiesto. Entonces, cuando ejecute la aplicación, primero establecerá el tema y, de esta manera, el usuario podrá ver directamente la imagen de bienvenida en lugar de la pantalla blanca.
fuente
Ambas propiedades funcionan
fuente
Intente esto una vez.
1) Cree un archivo dibujable splash_background.xml
2) Pon esto en styles.xml
3) En su AndroidMainfest.xml, configure el tema anterior para Iniciar actividad.
fuente
Simplemente escriba el elemento en values / styles.xml:
Por ejemplo, en AppTheme:
fuente
fuente
Para cualquiera que tenga esa pantalla blanca mientras depura, tenga en cuenta que si está depurando, tardará más en cargar. Si crea su APK de lanzamiento y lo instala en su teléfono, notará que se tarda mucho menos en cargar.
Por lo tanto, el tiempo de inicio con la versión de depuración no es igual al tiempo de inicio con la versión de lanzamiento.
fuente