"Программирование мобильных устройств на платформе .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; Сотрудники издательств Addison-Wesley и Pearson, которые вдохновляли меня и поддерживали мои намерения. Особую благодарность хочу выразить Карен Гетман (Karen Gettman), с которой я обсуждал первоначальное предложение о написании "технической книги, не похожей на все остальные", Элизабет Здунич (Elizabeth Zdunich), терпеливо работавшей со мной на протяжении всего процесса написания книги, а также Лори Лайенс (Lori Lyons) и Кейт Клайн (Keith Cline) за их титанический труд по редактированию книги.
#9632; Замечательные люди, которые просмотрели первоначальный черновой вариант книги. Если задача рецензента состоит в том, чтобы избавить будущего читателя книги от любых ошибок, неточностей и некорректности в авторских суждениях, то эти люди великолепно справились со своей работой. Мне очень повезло с получением от этих замечательных людей как вдохновляющих, так и "любовно укоризненных" отзывов. Если наши усилия увенчались успехом, то значительная доля возможных похвал по праву должна принадлежать рецензентам. В частности, хочу поблагодарить Крэйга Нибла (Craig Neable), Билла Дрэйпера (Bill Draiper), Джона Скита (Jon Skeet), Майкла Мэйтланда (Michael Maitland), Дуга Холланда (Doug Holland) и Алекса Фейнмана (Alex Feinman) за предоставление подробных отзывов на рукопись, сопровождаемых несметным количеством полезных советов и исправлений.
#9632; Мое руководство в компании Microsoft, поддержку которого я ощущал на протяжении всего времени. Это просто замечательно, когда тебе предоставляют полную свободу действий и дают возможность заняться собственным проектом, за что я им очень благодарен.