setContentView занимает много времени (10-15 секунд) для выполнения - PullRequest
1 голос
/ 18 ноября 2011

У меня есть большое действие, которое содержит 100 или более кнопок.Но он работает нормально после загрузки.Проблема однако загружается.От щелчка по значку запуска до первого просмотра - 10-12 секунд.До первого просмотра отображается серая строка заголовка на черном фоне.

По крайней мере, я хочу показать простой индикатор выполнения или диалог во время его загрузки.Но кажется, что вы не можете ничего показать до того, как setContentView выполнится.Я думаю, что попробовал все, что мог без какого-либо успеха.Если вы можете дать мне любую подсказку или идею, я был бы благодарен.

ОБНОВЛЕНИЕ:

Я нашел драматическое решение.Требуется секунда, чтобы загрузить представление.Я вообще не использовал задачи splash, thread или async - кстати, не пытайтесь использовать thread или async в пользовательском интерфейсе, потому что Android UI не является поточно-ориентированным.Проблема заключалась в том, что эти кнопки были основаны на пользовательском классе, который требует инициализации для загрузки того же ресурса.- поэтому в setContentView выполнялось 100 или более файловых операций.Сделав их одной загрузкой, я решил мою проблему.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы загружаете данные в один и тот же поток пользовательского интерфейса, поэтому во время загрузки ничего не будет отображаться. Используйте Async Task для загрузки в отдельном потоке.

1) Показать индикатор выполнения в onPreExecute() 2) загрузить данные в doInBackground(). никаких вещей, связанных с пользовательским интерфейсом здесь 3) Обновление изменений в пользовательском интерфейсе, скрытие progressBar в onPostExecute()

0 голосов
/ 18 ноября 2011

Используйте этот код до вызова setContentView().Может быть, это поможет.

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_PROGRESS);

setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...