У меня есть индикатор выполнения, который я изменяю от View.GONE
до View.VISIBLE
, перед тем, как позвонить классу writeFile()
.Android, индикатор выполнения не отображается перед запуском метода?
Что-то вроде этого:
onButtonPress(){
mProgressBar.setVisibility(View.VISIBLE);
writeFile();
}
Метода writeFile()
может занять несколько секунд (много разбора данных), но требует дополнительных действий, предпринятых пользователем после этого, и, таким образом, не выполняется в фоновом потоке. Это делается для того, чтобы пользователь не перемещался в другом месте приложения, а затем отображался всплывающее окно или перенаправлялось для того, что, по их мнению, было выполнено.
Моя проблема заключается в том, что индикатор выполнения не отображается до тех пор, пока метод writeFile()
не будет завершен, а затем коротко появится в течение секунды секунды, прежде чем пользователь будет перенаправлен в другое место.
Если я прокомментирую вызов метода, то ProgressBar появляется немедленно и вращается бесконечно, поэтому я знаю, что панель работает правильно.
Как я могу убедиться, что индикатор выполнения всплывает FIRST, а затем метод writeFile()
вызывается после?
Заранее спасибо.
Дополнительно:
У меня нет большого опыта (точно нет!) С asynctasks, и поэтому я не уверен, если это маршрут я должен взять. Поведение, которое я ищу, - это индикатор выполнения, который появляется, когда пользователь нажимает кнопку, и остается на экране до тех пор, пока метод не будет завершен. Я не хочу, чтобы пользователь просматривал приложение в течение этого времени.
ли метод запустить WriteFile в главном потоке? Если это ваша проблема, так как основной поток блокирует обновления пользовательского интерфейса. – Thorben
Да, да. Итак, это вопрос асинхронный? – Birrel
WriteFile блокирует пользовательский интерфейс основного потока, вы должны использовать другой поток. –