2010-09-19 2 views
1

Я бы хотел, чтобы появилось сообщение Toast Message, пока мое приложение загружает информацию, но даже если я помещаю его перед моим кодом, оно не появляется до тех пор, пока загрузка не будет завершена. Помещение моего кода в отдельный поток вызывает много головных болей, но тост в отдельном потоке тоже не работает. Есть ли в любом случае, я могу получить это сообщение Toast перед этим или мне просто придется работать через головные боли?Toast Immediately

+4

Это название, конечно, привлекло мое глаз по всем неправильным причинам. –

+0

Мне жаль, что я не мог сразу же получить хлеб. Ты не одинок. – Mitchell

ответ

4

В любом случае вы должны помещать асинхронные загрузки в отдельный поток, чтобы не отключать пользовательский интерфейс основного потока. Когда вы вызываете метод блокирующего ввода-вывода, пользовательский интерфейс не будет отвечать.

Ознакомьтесь с этой документацией по адресу Handling Expensive Operation in the UI Thread.

+0

Я знаю, но Java имеет метод paintImmediatly, который вы можете использовать, если вам нужно что-то нарисовать, даже если поток пользовательского интерфейса блокируется. – Mitchell

+0

@Mitchell: Проблема в том, что если поток пользовательского интерфейса слишком долго (я считаю, 5 секунд), Android предполагает, что ваше приложение заморожено и отображает диалог ANR пользователю. Вы действительно этого не хотите. –

+0

Я не знал, что это было причиной этого. Таким образом, я предполагаю, что точка является спорной. Всем спасибо! – Mitchell

1

Поскольку magaio уже сказал, что вы должны использовать другой поток для загрузки материала. Мои два цента:

  • использование прогресса диалог вместо Тост так Пользователь может реально увидеть процесс
  • Используйте AsyncTask для загрузки обновления прогресса так что пользователь может реально увидеть прогресс