Перейти к содержанию
Fire Monkey от А до Я
  • 0

Какой способ лучше для информирования пользователя о выполнении долгой операции?


brunnengi

Вопрос

Здравствуйте.

 

Подскажите пожалуйста как сделать правильно.

  1. По нажатию на Button происходит запрос к серверу.
  2. Сейчас я делаю запрос вызывая отдельный поток. А на время выполнения показываю просто layout на весь экран с вращающимся AniIndicator.

Правильно ли вообще делать это в отдельном потоке и если нет, то как правильно, подскажите плз.

И нормально ли выводить отдельный layout с индикатором, или же стоит использовать какое нибудь системное окошко со значком ожидания? Если системное, то как его вызвать? 

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Добрый день,

 

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

 

Способы индикации выполнения длительной операции

В голову на первый взгляд мне приходят, например, такие способы:

 

1. Модальное окно с индикацией хода выполнения операции

post-1-0-87902000-1406100313.pngpost-1-0-14459200-1406100272.png

Полностью блокирует работу с приложением, до тех пор, пока операция не закончится или пользователь не отменит ее выполнение.

 

Достоинства:

  1. Хорошо применимо, когда в вашем приложении много окон и вам нужно разом заблокировать все.
  2. Если вы идете этим путем, то вы можете сделать свою модальную форму со своим дизайном и любыми вариантами индикации вашей задачи, так же как вы работаете с FireMonkey. 
  3. Такой подход будет кроссплатформенным и хорошо будет работать, как на Windows, так и на OSX.

Недостатки:

  1. Если вы не используете специальные стили и хотите, чтобы ваше приложение выглядело на всех настольных версиях ОС, как родное, придется постараться, чтобы добиться полного соответствия с темой ОС.

 

2. Системное окно выполнения долгой операции

post-1-0-26066200-1406100272.png

Такой же способ, как и первый. Единственное отличие, что в этом способе вы используете диалоговое окно операционной системы.

 

Достоинства:

  1. Такое диалоговое окно будет на всех версия ОС Windows выглядеть, как родное. Вам не надо будет заботиться о том, что оно будет выглядеть "не так" в какой-то версии Windows.

Недостатки:

  1. Если вы используете свою стилизацию, отличную от системной. То вам придется изрядно попыхтеть, чтобы сделать нативный диалог в вашем стиле.
  2. Такое решение не кроссплатформенно. Вам придется отдельно реализовать такой диалог на разных платформах по разному.

3. Создание слоя, перекрывающего всю форму

post-1-0-14459200-1406100272.pngpost-1-0-34666400-1406100272.png

Заключается в размещении TLayout с TAniIndicator и TProgressDialog, перекрывающей все содержимое формы. 

 

Достоинства:

  1. В случаях, когда ваше приложение состоит из одной формы (без Docked окон), такое решение будет эффектно и красиво выглядеть.
  2. Кроссплатформенно

Недостатки:

  1. Не позволяет полностью блокировать интерфейс, если ваше приложение состоит из нескольких окон (не модальных).

4. Локальное отображение выполнения операции

post-1-0-07821100-1406101219.jpg

Если действие не должно блокировать весь интерфейс, то лучше сделать отображение индикации локальным. Например, в примере выше, при отправке заявки, пока заявка выполняется, отображается индикатор в самой кнопки. Кнопка при этом блокируется.

 

P.S. Если речь идет об андроиде, то обратите свое внимание на готовые компоненты отображения диалогов:

FGX. Индикация хода выполнения длительных операций, виртуальная клавиатура и ActionSheet

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...