Белый экран в onCreate

226
14 марта 2017, 13:20

Здравствуйте.В onCreate() делаю некоторые несложные действия.При запуске приложения сначала идет белый экран на 5 сек где то, а потом уже показывается дизайн. Почему такое происходит и как это исправить?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.header1 = (LinearLayout) findViewById(R.id.header1);
    this.header2 = (LinearLayout) findViewById(R.id.header2);
    this.header3 = (LinearLayout) findViewById(R.id.header3);
    this.header4 = (LinearLayout) findViewById(R.id.header4);
    this.header5 = (LinearLayout) findViewById(R.id.header5);
    this.header6 = (LinearLayout) findViewById(R.id.header6);
    this.header7 = (LinearLayout) findViewById(R.id.header7);
    this.header8 = (LinearLayout) findViewById(R.id.header8);
    this.header9 = (LinearLayout) findViewById(R.id.header9);
    this.header10 = (LinearLayout) findViewById(R.id.header10);
    this.header11 = (LinearLayout) findViewById(R.id.header11);
    this.header12 = (LinearLayout) findViewById(R.id.header12);
    this.header13 = (LinearLayout) findViewById(R.id.header13);
    this.header14 = (LinearLayout) findViewById(R.id.header14);
    this.header15 = (LinearLayout) findViewById(R.id.header15);
    this.header16 = (LinearLayout) findViewById(R.id.header16);
    this.header17 = (LinearLayout) findViewById(R.id.header17);
    this.header18 = (LinearLayout) findViewById(R.id.header18);
    this.header19 = (LinearLayout) findViewById(R.id.header19);
    this.header20 = (LinearLayout) findViewById(R.id.header20);
}
Answer 1

Инфлейт разметки происходит методом setContentView() - именно он читает XML-файл и на его основе строит изображение на экране. То есть, результатом выполнения этого метода является изображение, следовательно действия после этого метода на скорость отображения никак не влияют.

Учитывая, сколько у вас в последствии ищется только контейнеров (а они наверняка содержат еще большое количество виджетов в себе) не трудно предположить, что инфлейт такой разметки занимает достаточное количество времени.

Вам необходимо оптимизировать свою xml-разметку, сделать ее более простой и линейной. Для начала ее необходимо "прогнать" через Hierarchy Viewer (в настоящее время это не отдельный файл, а входит в инструменты Android Studio), чтобы определить проблемные места, затем думать, как решить эти проблемы. Все "лампочки" всех элементов разметки в идеале должны быть зелеными, на крайний случай - желтыми. Универсальных решений тут нет, но есть общие рекомендации по оптимизации разметки, и еще и вот еще.

READ ALSO
Замена typedef в Java

Замена typedef в Java

Какой аналог typedef из Си есть в Java? Или как это можно грамотно обойти? Например, работаю с Android-NDK, в Си есть функция, ее прототип:

252
Два тулбара в одном Activity

Два тулбара в одном Activity

Есть Activity у которого есть свой тулбарВ этом activity два фрагмента, один из которых также содержит свой тулбар

222
После обновления Android Studio перестал работать Hierarchy Viewer

После обновления Android Studio перестал работать Hierarchy Viewer

При запуске Android Device Monitr не работает Hierarchy ViewerВо всех окнах пишет ошибку:

966
net::ERR_INCOMPLETE_CHUNKED_ENCODING tomcat8

net::ERR_INCOMPLETE_CHUNKED_ENCODING tomcat8

Подскажите пожалуйстаСтоит на Ubuntu 16

293