Jak wszyscy wiemy, wiele aplikacji na Androida wyświetla bardzo krótko biały ekran, zanim pojawi się ich pierwszy Activity
. Ten problem jest obserwowany w następujących przypadkach:
Aplikacje na Androida, które rozszerzają
Application
klasę globalną i wykonują w nich główne inicjalizacje.Application
Przedmiot jest zawsze tworzona przed pierwsząActivity
(fakt, że można zaobserwować w debuggera), więc ma to sens. To jest przyczyna opóźnienia w mojej sprawie.Aplikacje na Androida, które wyświetlają domyślne okno podglądu przed ekranem powitalnym.
Ustawienie android:windowDisablePreview = "true"
oczywiście nie działa tutaj. Nie mogę też ustawić motywu nadrzędnego ekranu powitalnego Theme.Holo.NoActionBar
zgodnie z opisem tutaj , ponieważ [niestety] mój ekran powitalny korzysta z pliku ActionBar
.
Tymczasem aplikacje, które nie rozszerzają Application
klasy , nie wyświetlają białego ekranu podczas uruchamiania.
Chodzi o to, że idealnie inicjalizacje wykonywane w Application
obiekcie muszą nastąpić przedActivity
pokazaniem pierwszej . Moje pytanie brzmi więc, jak mogę wykonać te inicjalizacje podczas uruchamiania aplikacji bez użycia Application
obiektu? Prawdopodobnie używając Thread
lub Service
, jak przypuszczam?
To ciekawy problem do przemyślenia. Nie mogę tego ominąć w zwykły sposób (ustawiając NoActionBar
motyw), ponieważ tragicznie mój ekran powitalny ma w rzeczywistości ActionBar
jakieś niepowiązane przyczyny.
Uwaga:
Odniosłem się już do następujących pytań:
Bibliografia:
Application
klasy nadal jest to problem . Jest to spowodowane sposobem „zimnego uruchamiania” aplikacji w nowszych wersjach Androida. Google faktycznie zajął się terminami uruchomienia Google I / O w tym roku i zostanie to naprawione w N z tego, co pamiętam. W międzyczasie powinieneś przyjrzeć się temu, co Google nazywa „markowym ekranem startowym”. Oto przykład jak go stworzyć: antonioleiva.com/branded-launch-screen - koniec z białym ekranem na początku ;-) I proszę, nie używaj splashscreenów - to denerwuje użytkownika.Odpowiedzi:
Problem z białym tłem jest spowodowany zimnym startem Androida podczas ładowania aplikacji do pamięci i można go uniknąć w ten sposób:
układ
img face
Dodaj ten motyw do swojego ekranu powitalnego w manifeście
co da taki efekt
Więcej informacji i rozwiązań znajdziesz w tym BlogPost
źródło
dodaj tę linię do motywu aplikacji
więcej informacji: https://developer.android.com/topic/performance/vitals/launch-time#themed
źródło
Skopiuj i wklej te dwa wiersze w motywie aplikacji manifestu, np. Res / styles / AppTheme. wtedy będzie działać jak urok.
źródło
Przede wszystkim, aby usunąć biały ekran, przeczytaj to - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Ale co ważniejsze, zoptymalizuj początkowe ładowanie i odłóż ciężką pracę do czasu, gdy będziesz mieć czas na jej uruchomienie. Opublikuj tutaj swoją klasę aplikacji, jeśli chcesz, abyśmy się jej przyjrzeli.
źródło
W odpowiedziach brakuje zalecanego sposobu rozwiązania tego problemu. Więc dodaję tutaj moją odpowiedź. Problem z białym ekranem podczas uruchamiania występuje z powodu początkowego pustego ekranu, który proces systemowy rysuje podczas uruchamiania aplikacji. Typowym sposobem rozwiązania tego problemu jest wyłączenie tego początkowego ekranu poprzez dodanie go do
styles.xml
pliku.Ale zgodnie z dokumentacją Androida może to spowodować dłuższy czas uruchamiania. Według Google, zalecanym sposobem uniknięcia tego początkowego białego ekranu jest użycie
windowBackground
atrybutu motywu działania i zapewnienie prostego niestandardowego rysunku dla początkowej czynności.Lubię to:
Plik układu do rysowania,
my_drawable.xml
Stwórz nowy styl w swoim
styles.xml
Dodaj ten motyw do swojej początkowej aktywności w pliku manifestu
A jeśli chcesz wrócić do normalnego połączenia tematycznego
setTheme(R.style.Apptheme)
przed wywołaniemsuper.onCreate()
isetContentView()
Jest to zalecany sposób rozwiązania problemu i pochodzi z wzorców Google Material Design .
źródło
Czy próbowałeś ustawić
android:windowBackground
atrybut w motywie działania programu uruchamiającego na kolor lub element do narysowania?Na przykład to:
po dodaniu do motywu działania Launchera przy uruchomieniu będzie wyświetlany czarny kolor (zamiast białego). Jest to łatwa sztuczka do ukrycia długiej inicjalizacji, pokazując coś użytkownikom, i działa dobrze, nawet jeśli podklasujesz obiekt Application.
Unikaj używania innych konstrukcji (nawet wątków) do wykonywania długich zadań inicjalizacyjnych, ponieważ możesz nie być w stanie kontrolować cyklu życia takich konstrukcji. Obiekt Application jest właściwym miejscem do wykonywania dokładnie tego typu działań.
źródło
Dodałem następujące dwie linie do mojego motywu pod styles.xml
Działał jak urok
źródło
Miałem ten sam problem, musisz zaktualizować swój styl.
style.xml
Twój plik manifestu powinien wyglądać jak poniżej.
Outout:
Mam nadzieję, że to ci pomoże.
źródło
W ramach metod wywołania zwrotnego cyklu życia można zadeklarować, jak zachowuje się Twoja aktywność, gdy użytkownik opuszcza i ponownie wchodzi do działania. Pamiętaj, że sposób projektowania Androida ma swój cykl życia dla każdej aplikacji. Jeśli włożysz zbyt duże obciążenie do
onCreate()
metody (która jest metodą używaną do ładowania plików układu i inicjalizacji wszelkich kontrolek, które masz w niej), biały ekran stanie się bardziej widoczny, ponieważ ładowanie pliku układu będzie trwało dłużej.Proponuję użyć kilku różnych metod podczas rozpoczynania aktywności. Są to
onStart()
(wywoływane jako pierwsza rzecz po załadowaniu aplikacji)onActivityCreated()
(wywoływane po wyświetleniu układu i przydatne, jeśli przetwarzasz jakiekolwiek dane po rozpoczęciu działania).Aby ci to ułatwić, poniżej znajduje się oficjalny diagram cyklu życia działania:
źródło
Activity
, ale wApplication
obiekcie globalnym . I nie wierzę, że mogę tam zastosować taki rozdział obaw, ponieważ w przeciwieństwie doActivity
tego ma tylkoonCreate()
metodę.Application
całkowicie porzucić obiekt i przenieść cały kod inicjalizacji do pierwszegoActivity
...Czy próbowałeś ustawić inicjalizację na
onActivityCreated
?Application
Klasa wewnętrzna :źródło
Jak już wiesz, dlaczego jest tam ten biały ekran, ponieważ jest to spowodowane procesami w tle lub inicjalizacją aplikacji lub dużymi plikami, więc po prostu sprawdź poniższy pomysł na przezwyciężenie tego.
Aby zapobiec wyświetlaniu tego białego ekranu na początku aplikacji, jednym ze sposobów jest ekran powitalny, to po prostu sposób nie ostateczny i musisz go użyć.
Kiedy pokażesz ekran powitalny z pliku splash.xml, to również ten problem pozostanie taki sam,
Więc musisz stworzyć styl ont w pliku style.xml dla ekranu powitalnego i tam musisz ustawić tło okna jako obraz powitalny, a następnie zastosować ten motyw do swojej aktywności powitalnej z pliku manifestu. Więc teraz, kiedy uruchomisz aplikację, najpierw ustawi ona motyw, dzięki czemu użytkownik będzie mógł bezpośrednio zobaczyć obraz powitalny zamiast białego ekranu.
źródło
Obie właściwości działają
źródło
Spróbuj tego raz.
1) Utwórz plik do rysowania splash_background.xml
2) Umieść to w styles.xml
3) W pliku AndroidMainfest.xml ustaw powyższy motyw na Uruchom aktywność.
źródło
Po prostu napisz pozycję w values / styles.xml:
Na przykład w AppTheme:
źródło
źródło
Każdy, kto ma ten biały ekran podczas debbugowania, powinien mieć świadomość, że jeśli debbugujesz, ładowanie potrwa dłużej. Jeśli utworzysz pakiet APK wydania i zainstalujesz go na telefonie, zauważysz, że ładowanie zajmuje znacznie mniej.
Zatem czas uruchamiania z wersją debbugującą nie jest równy czasowi uruchamiania z wersją wydania.
źródło