"Программирование мобильных устройств на платформе .NET Compact Framework" - читать интересную книгу автора (Салмре Иво)
Об авторе Предисловие Мобильные устройства на наших глазах претерпевают революционные изменения Чего в наши дни не хватает большинству технических книг? Что нового в этой книге? На кого рассчитана эта книга? Благодарности От издательства ГЛАВА 1 Введение Добро пожаловать в мир разработки мобильного программного обеспечения Успех определяется несколькими ключевыми факторами Как читать эту книгу Способы разработки программ для мобильных устройств Серверные приложения для мобильных устройств Мобильные приложения на основе модели интеллектуального клиента Управляемый код .NET Compact Framework — среда выполнения управляемого кода для устройств Резюме ГЛАВА 2 Характеристики мобильных приложений Введение Распространенные схемы использования мобильных устройств Долговременные и кратковременные виды деятельности Исследовательские и целевые виды деятельности Форм-фактор Требования надежности Важные характеристики мобильных приложений Время запуска Отклик устройства Фокусирование внимания на отдельных задачах Настройка взаимодействия с внешними источниками информации Единообразие стиля интерфейса Различия в архитектуре компьютеров Резюме ГЛАВА 3 Внутренняя структура .NET Compact Framework Введение Как проектировалась .NET Compact Framework .NET Compact Framework как подмножество платформы для настольных компьютеров Управляемый код и собственный код Исполнительный механизм Библиотеки управляемого кода Библиотеки базовых классов Библиотеки пользовательского интерфейса Библиотеки клиентов Web-служб Библиотеки XML Библиотеки данных Вынесение полезной отладочной и проектной информации в необязательные компоненты Средства подключения к базам данных SQL СЕ/SQL Элементы, отсутствующие в первой версии .NET Compact Framework Защита доступа Мультимедиа Как запускается и выполняется код Управление памятью и сборка мусора Краткий обзор методов управления памятью и сборки мусора Резюме ГЛАВА 4 Как добиться успеха при разработке мобильных приложений Введение Трудности постоянного и временного характера, с которыми приходится сталкиваться при разработке программного обеспечения Трудности временного характера и способы их преодоления Трудности постоянного характера и методологии, привлекаемые для их разрешения Разработка программ является итеративным процессом, который, тем не менее, также должен подчиняться определенным правилам Описание проекта Плановые пересмотры проекта Детали ничего не стоят, если общая картина неверна Решайте задачи в определенной очередности; не бойтесь при необходимости возвращаться назад Шаг 0: прежде чем приступать к работе, определите сферу применения вашего приложения Шаг 1: начните с анализа проблем производительности и никогда не упускайте их из виду Шаг 2: спроектируйте подходящий пользовательский интерфейс Шаг 3: выберите подходящие модели данных и памяти Шаг 4: выберите подходящую модель коммуникации и модель ввода-вывода При необходимости вернитесь к шагам 0, 1, 2 и 3 Шаг 5: пакетирование приложения для его установки Резюме ГЛАВА 5 Наш друг конечный автомат Введение Что такое конечный автомат? Явно и неявно определенные конечные автоматы Подход 1: зависящее от специфики конкретной ситуации, децентрализованное, неявное управление состояниями (неудачный подход) Подход 2: плановое, централизованное, явное управление состояниями (удачный подход) Сколько конечных автоматов должно быть в приложении? Конечный автомат для пользовательского интерфейса Конечный автомат для модели памяти Конечный автомат для фоновых задач Использование конечных автоматов в играх Резюме ГЛАВА 6 Шаг 0: прежде чем приступать к работе, определите сферу применения приложения Введение Независимое приложение или часть большой системы? Независимые приложения Наборы взаимосвязанных приложений, установленных на устройстве Мобильные приложения, взаимодействующие с приложениями для настольных компьютеров и серверов Не пытайтесь просто переносить на устройства приложения, рассчитанные на настольные компьютеры! Мыслите категориями устройств! Стереотипы использования мобильного и настольного программного обеспечения Шаги по определению сферы применения мобильного приложения ГЛАВА 7 Шаг 1: начинайте с анализа проблем производительности и никогда не упускайте их из виду Введение Важность планомерного подхода Определите обязательные характеристики сценариев рабочих сеансов пользователя Определите контрольные точки разработки, критерии завершения которых ориентированы на достижение высокой производительности Время от времени критически пересматривайте написанный код Определите модель памяти для вашего приложения Как можно чаще контролируйте показатели, характеризующие работу вашего приложения Программа для измерения характеристик кода Выполняйте тестирование с использованием реальных объемов данных Тестируйте приложения в предельных режимах Своевременно предпринимайте меры по поддержанию высокой производительности приложения (со временем ситуация будет только ухудшаться!) Определение задач, решение которых необходимо для достижения высокой производительности Ha всем, что связано с оценкой производительности, лежит печать субъективности Немедленная ответная реакция приложения Максимальная продолжительность отображения курсора ожидания Максимальная продолжительность загрузки/сохранения данных, а также запуска/закрытия приложения Накладные расходы по обработке исключений Пример сравнения эквивалентных алгоритмов, в которых возбуждение исключений соответственно используется или не используется Резюме ГЛАВА 8 Производительность и управление памятью Определение модели памяти для приложения Управление памятью на макроскопическом "уровне приложения" Управление "служебными" данными приложения Управление объемом пользовательских данных, хранящихся в памяти Использование модели загрузки данных по требованию Управление памятью на микроскопическом "уровне алгоритма" Пишите аккуратные алгоритмы: не сорите! Пишите экономные алгоритмы: разумно расходуйте память и повторно используйте объекты Повторно используйте размещенные в памяти объекты при любом удобном случае Избегайте размещения в памяти лишних объектов Анализ описанных выше шагов последовательной оптимизации Уделяйте особое внимание тому, как используются строки в ваших алгоритмах Пример эффективного создания строк Резюме ГЛАВА 9 Производительность и многопоточное выполнение Введение: когда и как следует использовать многопоточное выполнение Многозадачность и многопоточность в современных операционных системах В каких случаях следует использовать фоновые потоки Рекомендации по использованию потоков в мобильных приложениях Назначайте обслуживание пользовательского интерфейса основному потоку Стремитесь поддерживать способность пользовательского интерфейса к отклику на высоком уровне Начинайте с создания однопоточного приложения В простых случаях пытайтесь обойтись без многопоточного выполнения, используя курсоры ожидания Рассмотрите возможность использования фоновых потоков, если выполнение задачи требует длительного или неопределенного времени Максимально упрощайте многопоточный код и документируйте его для повышения надежности Рассмотрите возможность предварительного выполнения некоторой работы, осуществляемой кодом Пример использования фонового потока для выполнения отдельной задачи Потоки и пользовательский интерфейс Пример использования фоновой обработки одновременно с обновлением данных высокоприоритетного потока пользовательского интерфейса Резюме ГЛАВА 10 Производительность и XML Введение: работа с XML XML или не XML? Сравнение XML с другими текстовыми форматами Различные способы хранения данных в виде текста Иерархическая структура XML-данных Другие возможности XML Различные способы работы с XML Простой пример, иллюстрирующий применение модели XML DOM и однонаправленного чтения-записи XML-документов Пример: содержимое XML-файла XML DOM Модель однонаправленного чтения-записи XML-данных Повышение производительности приложения перекладыванием работы на другие программы Избегайте выполнения сложных преобразований данных на устройстве Избегайте выполнения сложного поиска данных на устройстве Рассмотрите возможность исключения необязательной информации перед отправкой данных на устройство Когда не стоит перекладывать выполнение работы на сервер Резюме ГЛАВА 11 Производительность графического кода и пользовательского интерфейса Введение Стратегии проектирования высокопроизводительных пользовательских интерфейсов Использование встроенных средств повышения производительности Выполняйте тесты с использованием реальных объемов данных, которые будут отображаться в вашем приложении Отсроченный выбор — это благо! Откладывайте, откладывайте, откладывайте… Будьте внимательны, когда работаете с кодом, управляемым событиями Не допускайте, чтобы пользователю оставалось лишь догадываться о ходе выполнения приложения Выбор подходящих форматов и размеров растровых изображений Размеры изображения имеют существенное значение Так много файловых форматов и так мало времени… Как поступать в тех случаях, когда источником изображения с высоким разрешением является само мобильное устройство Стратегии проектирования высокопроизводительного графического кода Способы интеграции графики с кодом пользовательского интерфейса Где рисовать — на экране или вне экрана? Определите собственный процесс визуализации Отсрочка — зло, используйте предварительные вычисления Кэшируйте часто используемые ресурсы Старайтесь избегать распределения памяти для объектов при выполнении повторяющихся или непрерывно продолжающихся операций рисования Резюме ГЛАВА 12 Производительность: подведение итогов Итоговые замечания по поводу производительности Производительность и управление памятью Производительность и многопоточное выполнение Производительность и уровни абстракции API-интерфейсов Связь производительности с организацией пользовательского интерфейса и работы с графикой Старайтесь постоянно информировать пользователя о ходе выполнения приложения Заключительные замечания и рекомендации ГЛАВА 13 Шаг 2: проектирование подходящего пользовательского интерфейса Мыслите категориями устройств! Один размер для всего не годится Одна рука или две? Возрастание роли навигационных средств при уменьшении экранного пространства Списки или вкладки? Пользовательские интерфейсы мобильных телефонов и важность соблюдения единообразия в использовании клавиш Сенсорные экраны и важность использования крупных кнопок Оптимизируйте ввод обычных данных Убедитесь в том, что для механизмов автоматизированного ввода предусмотрены параллельные механизмы ввода вручную Тестирование на эмуляторах и физических устройствах Проектируйте код пользовательского интерфейса мобильного приложения таким образом, чтобы его можно было легко тестировать и модифицировать Модель состояний для компоновки пользовательского интерфейса и управления им Пример кода, демонстрирующий две различные модели компоновки для одного и того же приложения Размещение элементов управления Экранное пространство — ценная вещь Разработка улучшенных пользовательских интерфейсов средствами .NET Compact Framework Динамическое создание элементов управления Создание пользовательских элементов управления и перекрытие поведения существующих элементов управления Использование прозрачных областей растровых изображений Встраивание изображений в виде ресурсов приложений Резюме ГЛАВА 14 Шаг 3: разработка подходящей модели данных Введение в модели доступа к данным, используемые в мобильных приложениях Выбор подходящих абстракций для хранения данных в памяти Выбор подходящей модели данных, требующих долговременного хранения Специфика .NET Compact Framework: ADO.NET Элементарные сведения об объектах ADO.NET DataSet Отслеживание изменения данных Две модели использования ADO.NET Различные способы хранения долговременных данных SQL СЕ Резюме ГЛАВА 15 Шаг 4: выбор подходящей коммуникационной модели Введение в технологии связи с помощью мобильных приложений Написание кодов программ для работы с мобильными сетями Не допускайте того, чтобы работа приложения всецело зависела от возможности подключения к сети Не допускайте того, чтобы поток пользовательского интерфейса блокировался на длительное время Работайте на самом высоком уровне абстракции, который соответствует вашим потребностям Всегда исходите из того, что связь может быть нарушена в любой момент Имитация сбоев связи с целью тестирования отказоустойчивости приложения Информируйте пользователя о ходе выполнения процесса синхронизации данных Исходите из того, что скорость передачи данных и длительность задержек могут меняться Внедряйте необходимые коммуникационные средства безопасности уже на ранних стадиях проектирования приложения Передача данных и выбор сети Wi-Fi: локальные сети Bluetooth: персональные сети Сети мобильной телефонной связи/сотовая связь Связь посредством лотка/кабельного соединения с ПК Сетевой кабель IrDA Карты памяти Принудительная перекачка информации на устройства Web-службы Очень краткое описание Web-служб Вызов Web-служб с мобильного устройства Трудности, связанные с использованием Web-служб на мобильных устройствах Резюме ГЛАВА 16 Шаг 5: упаковка и развертывание мобильного приложения Введение Нуждается ли ваше мобильное приложение в цифровой подписи? Инсталляция сред выполнения и других необходимых компонентов Динамическое развертывание сред выполнения на мобильных устройствах Динамическая установка компонентов, необходимых приложению Возможные варианты упаковки и установки Копирование и выполнение / загрузка и выполнение Установка под управлением устройства Установка под управлением настольного компьютера Установка с использованием карт памяти Установка с использованием инструмента разработки Установка приложений в ПЗУ Резюме ГЛАВА 17 Послесловие ПРИЛОЖЕНИЕ А Дополнительные ресурсы по .NET Compact Framework Сетевые ресурсы Обмен программами Сетевые телеконференции Общие вопросы разработки мобильных приложений Особенности взаимодействия с собственным кодом Работа с операторами мобильных сетей Развертывание и установка Оптимизация производительности ПРИЛОЖЕНИЕ Б Примеры программ на языке Visual Basic .NET Почему именно VB.NET и С#? Примеры к главе 5 (конечные автоматы) Примеры к главе 7 (производительность: введение) Примеры к главе 8 (производительность и память) Примеры к главе 9 (производительность и многопоточное выполнение) Примеры к главе 10 (производительность и XML) Примеры к главе 11 (производительность и графика) Примеры к главе 13 (проектирование пользовательского интерфейса) Примеры к главе 14 (данные) Примеры к главе 15 (передача данных)
Эту книгу я посвящаю своим учителям, как формальным, так и неформальным, но в первую очередь — родителям, Эйр (Aire) и Уильяму Салмре (William Salmre). Если мне и удалось взглянуть на кое-что по-новому и изложить свои мысли с пользой для дела, так это только благодаря доброте и терпению тех, кто не пожалел времени на то, чтобы провести меня вверх по склону горы и указать правильное направление. Спасибо вам всем.
Благодарности издательства Издательский дом "Вильямс" благодарит Ерофеева Сергея и Кущенко Сергея за большой вклад в подготовку издания книги.
На кого рассчитана эта книга? #9632; Те, кто в настоящее время занят разработкой программного обеспечения для мобильных устройств. Интересующая нас область разработки программного обеспечения стремительно развивается и из своего рода искусства черной магии, которым владели лишь посвященные, постепенно становится сферой деятельности, доступной для самого широкого круга разработчиков. В этой книге предпринимается попытка обрисовать многообещающие и, как я могу надеяться, новые перспективы разработки мобильного программного обеспечения, что будет полезно как тем, кто впервые столкнулся с тематикой мобильных устройств, так и тем, кто уже набил руку на разработке подобных программ.
#9632; Разработчики программного обеспечения на языках Java, С# и VB.NET для настольных компьютеров и серверов, которые подумывают о переходе, или уже перешли, к разработке программного обеспечения для мобильных устройств. Те разработчики программного обеспечения для настольных компьютеров и серверов, кто уже использует упомянутые языки программирования, смогут сразу же приступить к работе с приведенными в книге примерами программ. Кроме того, книга поможет им глубже понять различия между разработкой программного обеспечения для классических настольных компьютеров и серверов с одной стороны и мобильных устройств с другой. Надеюсь, что для разработчиков этой категории чтение книги послужит своего рода приятным ознакомительным туром и убедит их в том, что разработка мобильного программного обеспечения — это стрела, которая каждый разработчик обязательно должен иметь в своем колчане. Эта книга поможет им получить знания и навыки, без которых невозможно создать хорошее мобильное приложение.
#9632; Разработчики программного обеспечения на С++, которые подумывают о переходе к языкам управляемой среды выполнения, например С#. Существует довольно большая вероятность того, что те, кто сегодня использует для разработки программ С и С++, в ближайшем будущем для выполнения некоторой части своей программистской работы будут использовать языки с управляемым кодом, примером которых может служить язык С#. Достигаемый при этом выигрыш в производительности и надежности программ просто ошеломляет. Многие примеры в этой книге написаны на С#, так что разобраться в текстах программ разработчикам на С/С++ не составит особого труда.
#9632; Разработчики программного обеспечения на Visual Basic, которые хотели бы начать работать с VB.NET или С#. В этой книге примеры приводятся как на С#, так и на Visual Basic .NET, что облегчает изучение основ упомянутых языков и использование библиотек времени выполнения .NET Framework. Поскольку платформа .NET Compact Framework представляет собой некое функционально развитое подмножество инструментальных средств платформы .NET Framework, ориентированной на настольные компьютеры и серверы, написание программ для мобильных устройств превратится для разработчиков этой категории в приятный способ изучения новых программных моделей.
#9632; Все, кто заинтересован в оттачивании своего технического мастерства в области программирования. Данная книга в основном направлена на то, чтобы оказать помощь читателю в выработке устойчивых технических навыков. Те, кто желает отточить свое мастерство в области разработки программного обеспечения для серверов, настольных компьютеров и других устройств, смогут по-новому и с пользой для себя посмотреть на задачи программирования с точки зрения разработчиков программ для мобильных устройств.
#9632; Архитекторы программного обеспечения, которые ищут возможности расширения существующих решений за счет поддержки мобильных устройств. Компьютеризация мобильных устройств предлагает новую интересную среду для расширения существующих решений, ориентированных на серверы и настольные компьютеры. Для этого необходимо хорошо понимать, на что способны мобильные устройства, а чего от них не следует ожидать. Чтение данной книги поможет архитекторам программного обеспечения понять, какую роль мобильные устройства смогут играть в их решениях.