Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
Немедленная ответная реакция приложения
Автомобиль, обладающий великолепными эксплуатационными характеристиками, реагирует на малейшее ваше движение; совершая любое действие, водитель ощущает немедленную ответную реакцию, по которой он может судить, что все идет нормально. В случае мобильных устройств эта обратная связь большей частью является визуальной. Иногда обратная связь обеспечивается звуковыми или тактильными средствами, как это имеет место, например, при звуковом подтверждении нажатия кнопки или индикации наступления определенного события вибрацией телефона. Независимо от метода, обеспечивающего ответную реакцию устройства, важно, чтобы пользователь мог быстро понять, что его команды восприняты и отданное им распоряжение выполняется.
Для различных типов устройств предусматриваются различные виды ответной реакции. Быстрая, безошибочная и информативная обратная связь с пользователем является отличительным признаком хорошо спроектированного мобильного устройства.
Проведем мысленный эксперимент, обратившись в качестве примера к телевизионному пульту дистанционного управления. Хорошие пульты часто обеспечивают несколько разновидностей обратной связи. Во-первых, вы должны ощущать физическое сопротивление кнопок нажатию; каждому, кому приходилось пользоваться дистанционным пультом управления, не имеющим дискретных физических кнопок, знакомо чувство неуверенности, возникающему при нажатии так называемых "программных" кнопок. Во-вторых, в ответ на нажатие какой-либо кнопки дистанционные пульты часто подсвечиваются, указывая на то, что они приняли запрос и пытаются отреагировать на ваш ввод. В-третьих, непосредственной визуальной ответной реакцией телевизионного приемника на получение команды от пульта является вывод на экран шкалы регулятора громкости, цифры или любого другого визуального подтверждения. Если в любом из перечисленных случаев задержка ответной реакции превышает 0,5 секунды, то из-за недостаточно быстрой обратной связи работа пульта кажется замедленной. Эта задержка называется задержкой реакции, и если она наблюдается, то у пользователя немедленно возникает ощущение, что ему попался бракованный пульт. Это вовсе не означает, что пользователь требует, чтобы результаты выполнения отданной команды всегда проявлялись немедленно (хотя это всегда радует); главное, что отличает хороший пульт от плохого, — это немедленное извещение пользователя о том, что его команда принята
Аналогичные моменты должны учитываться вами и при проектировании приложений. Часто для организации хорошей обратной связи требуется всего лишь добавить в приложение немного кода и чуть-чуть его приукрасить, но это оказывает огромный положительный эффект на пользовательское восприятие устройства и его оценку качества приложения.
В качестве одной из целей разработки всегда указывайте обязательное подтверждение получения команд пользователя, даже если они не могут быть немедленно обработаны. Обычно любая задержка с таким подтверждением, превышающая 0,5 секунды, вызывает у конечного пользователя чувство раздражения. При возникновении задержки ответа пользователи часто пытаются повторить команду, что может стать причиной еще большего раздражения, если вторая команда переводит приложение в нежелательное состояние или оно начинает работать не так, как ожидается.
Неплохой аналогией этому в повседневной жизни может служить ожидание в очереди. Когда подходит ваша очередь, вы хотите получить подтверждение того, что человек, обслуживающий очередь, вас заметил. Если в течение некоторого времени на вас не обращают никакого внимания, вы начинаете раздражаться. Даже если бы вас всего лишь попросят немного обождать, это будет несравненно лучше, чем вообще не получить никаких признаков ответной реакции от того, кто вас должен обслужить. Не допускайте того, чтобы ваше приложение игнорировало пользователя даже на протяжении коротких промежутков времени.
Ниже приводится пример кода, который иллюстрирует три различных варианта организации обратной связи с пользователем, активизируемых щелчками на соответствующих кнопках. Каждая кнопка имитирует запуск определенной задачи, для выполнения которой требуется 4 секунды. Во всех случаях интерактивная связь с пользователем на время выполнения задачи теряется, однако восприятие
1. Плохая обратная связь. В этом случае пользовательский интерфейс просто блокируется на время выполнения работы. Пользователи не получают никакого сообщения о причине блокирования, им ничего не сообщается о том, как долго будет отсутствовать связь с интерфейсом, и они не извещаются о восстановления способности приложения к отклику. Подобное поведение пользовательского интерфейса будет очень раздражать конечных пользователей, поскольку им остается только гадать, когда их щелчки на кнопках вновь смогут вызывать определенные действия со стороны приложения. Щелчки, выполненные в то время, когда приложение не проявляет ответной реакции, помещаются в очередь и обрабатываются тогда, когда приложение восстанавливает свою способность к интерактивному взаимодействию с пользователем. В результате этого, если пользователь начинает проверять, вернулось ли приложение в обычный режим, то могут быть выполнены нежелательные действия. Этот пример демонстрирует образец совершенно непродуманного, неудачного дизайна.
2. Хорошая обратная связь. В этом случае пользовательский интерфейс отображает "курсор ожидания" в течение всего периода, на протяжении которого интерфейс не способен отвечать на запросы пользователей. Наличие курсора ожидания говорит пользователям о том, что в настоящее время приложение не может реагировать на их запросы, а его исчезновение будет означать, что способность приложения реагировать на запросы восстановлена. Таким образом, для существенного улучшения поведения пользовательского интерфейса потребовались лишь самые незначительные усилия.
3. Улучшенная обратная связь. В этом случае на экране отображается не только курсор ожидания, информирующий пользователей о том, что приложение не может реагировать на их запросы, но и текстовое сообщение, объясняющее, чем именно занято приложение в данный момент. Такое поведение интерфейса еще больше устраивает пользователей, поскольку они становятся информированными участниками процесса, и пока идет работа, для них выводится пояснительный текст. Если в процессе выполнения этой работы происходят какие-либо изменения, пользователи будут об этом знать. Постоянно получая информацию о состоянии задачи, пользователи чувствуют себя комфортно. Для создания подобных условий требуется приложить немного больше усилий, чем во втором примере, но если мы в состоянии держать пользователей в курсе дел и предоставить им возможность следить за происходящими в системе изменениями, то достигнутый эффект окупит затраченные на это усилия.
Предполагается, что представленный в листинге 7.3 текст вы поместите в класс Form в проекте для Pocket PC. Для создания и выполнения примера необходимо выполнить следующие действия:
1. В Visual Studio .NET (2003 или более поздней версии) начните новый проект для Pocket PC с использованием языка C#.
2. Разместите в окне конструктора формы для Pocket PC текстовую метку и три кнопки (как показано на рис. 7.1).
3. Дважды щелкните мышью на пустом месте окна конструктора форм; в результате этого будет создан и присоединен к форме обработчик событий Form1_Load, представленный ниже. Включите в эту процедуру приведенный ниже код.
4. Дважды щелкните на кнопке Button1 формы; в результате этого будет создан и присоединен к форме обработчик событий button1_Click, представленный ниже. Включите в эту процедуру приведенный ниже код.
5. Проделайте то же самое для кнопок Button2 и Button3 и включите их коды в соответствующие процедуры.
6. Нажмите клавишу <F5> для запуска приложения на эмуляторе или физическом устройстве Pocket PC. (Если вы хотите запустить приложение без отладчика, нажмите комбинацию клавиш <Ctrl+F5>.)