Como todos sabemos, muitos aplicativos Android exibem uma tela branca brevemente antes de seu primeiro Activity
entrar em foco. Este problema é observado nos seguintes casos:
Aplicativos Android que estendem a
Application
classe global e executam inicializações importantes nela. OApplication
objeto é sempre criado antes do primeiroActivity
(fato que pode ser observado no depurador), então faz sentido. Essa é a causa do atraso no meu caso.Aplicativos Android que exibem a janela de visualização padrão antes da tela inicial.
A configuração android:windowDisablePreview = "true"
obviamente não funciona aqui. Nem posso definir o tema pai da tela inicial Theme.Holo.NoActionBar
conforme descrito aqui , porque [infelizmente] minha tela inicial usa umActionBar
.
Enquanto isso, aplicativos que não estendem a Application
classe não mostram a tela branca na inicialização.
A questão é que, idealmente, as inicializações realizadas no Application
objeto precisam ocorrer antes que a primeira Activity
seja mostrada. Então, minha pergunta é: como posso realizar essas inicializações na inicialização do aplicativo sem usar um Application
objeto? Possivelmente usando um Thread
ou Service
, suponho?
Este é um problema interessante para se pensar. Não consigo ignorar da maneira usual (definindo o NoActionBar
tema), pois tragicamente minha tela inicial tem umActionBar
devido a alguns motivos não relacionados.
Nota:
Já me referi às seguintes questões:
Referências:
Application
classe. Isso se deve às versões mais recentes da maneira do Android de "inicializar a frio" os aplicativos. O Google realmente abordou os horários de lançamento no Google I / O este ano e será corrigido em N pelo que me lembro. Nesse ínterim, você deve olhar para o que o Google chama de "tela de lançamento de marca". Aqui está um exemplo de como criá-lo: antonioleiva.com/branded-launch-screen - chega de tela branca no início ;-) E, por favor, não use splashscreens - é irritante para o usuário.Respostas:
O problema com o fundo branco é causado pela inicialização a frio do Android enquanto o aplicativo carrega na memória e pode ser evitado com isto:
layout
cara img
Adicione este tema à sua tela inicial no manifesto
que irá produzir um efeito como este
para mais detalhes e mais soluções você pode verificar este BlogPost
fonte
por favor, adicione esta linha ao tema do seu aplicativo
para mais informações: https://developer.android.com/topic/performance/vitals/launch-time#themed
fonte
Copie e cole essas duas linhas no tema do aplicativo de manifesto, ou seja, res / styles / AppTheme. então vai funcionar como um encanto ..
fonte
Em primeiro lugar, para remover a tela branca, leia isto - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Mas, o mais importante, otimize sua carga inicial e adie qualquer trabalho pesado para quando tiver tempo de executá-lo. Poste sua classe de aplicativo aqui se quiser que a examinemos.
fonte
A maneira recomendada de resolver esse problema está faltando nas respostas. Portanto, estou adicionando minha resposta aqui. O problema de tela branca na inicialização ocorre por causa da tela em branco inicial que o processo do sistema desenha ao iniciar o aplicativo. Uma maneira comum de resolver isso é desligar esta tela inicial adicionando-a ao seu
styles.xml
arquivo.Mas, de acordo com a documentação do Android, isso pode resultar em um tempo de inicialização mais longo. A maneira recomendada de evitar essa tela branca inicial de acordo com o Google é usar o
windowBackground
atributo tema e fornecer um drawable personalizado simples para a atividade inicial.Como isso:
Arquivo de layout drawable,
my_drawable.xml
Crie um novo estilo em seu
styles.xml
Adicione este tema à sua atividade inicial no arquivo Manifest
E quando você quiser voltar ao seu tema normal, ligue
setTheme(R.style.Apptheme)
antes de ligarsuper.onCreate()
esetContentView()
Esta é a maneira recomendada para resolver o problema e isso vem dos padrões do Google Material Design .
fonte
Você já tentou definir o
android:windowBackground
atributo no tema de sua atividade de inicialização, como uma cor ou um desenho?Por exemplo, este:
quando adicionado ao tema de atividade do Launcher, irá mostrar uma cor preta (em vez da cor branca) na inicialização. Este é um truque fácil para ocultar a inicialização longa, enquanto mostra algo aos usuários, e funciona bem mesmo se você criar uma subclasse do objeto Aplicativo.
Evite usar outras construções (mesmo Threads) para fazer longas tarefas de inicialização, porque você pode acabar não sendo capaz de controlar o ciclo de vida de tais construções. O objeto Aplicativo é o local correto para realizar exatamente esse tipo de ação.
fonte
Eu adicionei as duas linhas a seguir em meu tema em styles.xml
Funcionou como um encanto
fonte
Eu tive o mesmo problema, você tem que atualizar seu estilo.
style.xml
Seu arquivo de manifesto deve ser semelhante a abaixo.
Fora fora:
Espero que isso possa ajudá-lo.
fonte
Dentro dos métodos de retorno de chamada do ciclo de vida, você pode declarar como sua atividade se comporta quando o usuário sai e entra novamente na atividade. Lembre-se de que, da maneira como o Android foi projetado, há um ciclo de vida para cada aplicativo. Se você colocar muita carga no
onCreate()
método (que é o método usado para carregar os arquivos de layout e inicializar quaisquer controles que você tenha nele), então a tela branca ficará mais visível, pois o arquivo de layout demorará mais para carregar.Sugiro usar vários métodos diferentes ao iniciar uma atividade. Tais são o
onStart()
(sendo chamado como a primeira coisa depois que o aplicativo é carregado),onActivityCreated()
(sendo chamado depois que o layout é exibido e útil se você estiver fazendo qualquer processamento de dados ao iniciar a atividade).Para facilitar para você, abaixo está o diagrama oficial do ciclo de vida da atividade:
fonte
Activity
, mas sim noApplication
objeto global . E não acredito que possa aplicar essa separação de preocupações aqui, porque ao contrário de um,Activity
ela só tem umonCreate()
método.Application
objeto completamente e mover todo o código de inicialização para o primeiroActivity
...Você tentou colocar a inicialização em
onActivityCreated
?Dentro da
Application
classe:fonte
Como você já sabe por que essa tela branca está ali, como devido a processos em segundo plano ou inicialização de aplicativos ou arquivos grandes, basta verificar a seguir a ideia para superar isso.
Para evitar essa tela branca no início do aplicativo, uma forma é a tela inicial, esta é apenas uma forma não final e você deve ter que usar.
Quando você mostrar a tela inicial do arquivo splash.xml, este problema permanecerá o mesmo,
Portanto, você deve criar um estilo no arquivo style.xml para a tela inicial e definir o plano de fundo da janela como sua imagem inicial e, em seguida, aplicar esse tema à sua atividade inicial a partir do arquivo de manifesto. Então, agora, quando você executar o aplicativo, primeiro ele definirá o tema e, dessa forma, o usuário poderá ver a imagem inicial diretamente em vez da tela branca.
fonte
Ambas as propriedades funcionam
fonte
Por favor, tente uma vez.
1) Crie um arquivo drawable splash_background.xml
2) Coloque isso em styles.xml
3) Em seu AndroidMainfest.xml, defina o tema acima para Lançar atividade.
fonte
Basta escrever o item em values / styles.xml:
Por exemplo, no AppTheme:
fonte
fonte
Para qualquer pessoa que tenha uma tela branca durante a depuração, esteja ciente de que, se estiver depurando, ela demorará mais para carregar. Se você criar seu APK de lançamento e instalá-lo em seu telefone, perceberá que leva muito menos tempo para carregar.
Portanto, o tempo de inicialização com a versão de depuração não é igual ao tempo de inicialização com a versão de lançamento.
fonte