Читать книгу «Разработка Android-приложений в деталях» онлайн полностью📖 — Тимура Сергеевича Машнина — MyBook.
image

Перспектива DDMS

Перспектива DDMS запускает инструмент отладки Dalvik Debug Monitor Server набора SDK Tools и отображает его GUI-интерфейс в виде набора Eclipse-представлений, обеспечивая информацию о работе эмулятора или подсоединенного Android-устройства.

Перспектива DDMS содержит представления Devices, Emulator Control, LogCat, Threads, Heap, Allocation Tracker, Network Statistics, System Information и File Explorer.

Представление Devices отображает подключенные Android-устройства. Для каждого подключенного Android-устройства Devices-представление показывает все запущенные на нем процессы, каждый из которых работает в своем экземпляре виртуальной машины Dalvik. Каждый отображаемый процесс представляет инсталлированное и запущенное на Android-устройстве приложение, поэтому идентификация процесса производится по имени пакета приложения. Так как виртуальная машина Dalvik работает поверх ядра Linux, каждый процесс имеет свой Linux-идентификатор, отображаемый в окне Devices после имени пакета. Крайний правый столбец окна Devices показывает номер порта, который DDMS-инструмент назначает для подсоединения Eclipse-отладчика к экземпляру Dalvik-машины с использованием протокола JDWP (Java Debug Wire Protocol). По умолчанию Eclipse-отладчик подсоединяется к статическому порту 8700, на который перенаправляются трафики экземпляров Dalvik-машины от всех портов. DDMS-инструмент взаимодействует с подключенным Android-устройством с помощью инструмента Android Debug Bridge (adb), имеющего клиент-серверную архитектуру. DDMS-инструмент создает adb-клиента, который взаимодействует с adb-демоном (фоновый процесс, работающий в Android-устройстве) через adb-сервер.


Панель инструментов представления Devices содержит следующие кнопки:

(Debug the selected process, …) – подсоединяет процесс, представляющий Android-приложение с открытым в среде Eclipse проектом, к Eclipse-отладчику, для работы с которым используется перспектива Debug.



(Update Heap) – включает информацию об использовании динамической памяти для процесса.



(Dump HPROF file) – создает снимок динамической памяти в виде HPROF-файла. В случае Android-устройств версии 2.1 и ранее для создания HPROF-файла требуется наличие SD-карты памяти, а также разрешения <uses-permission http://www.eclipse.org/mat/).rmission. WRITE_EXTERNAL_STORAGE»/> в файле манифеста AndroidManifest. xml Android-приложения. Анализ HPROF-файла можно выполнить с помощью Eclipse-плагина Memory Analyzer (MAT) (android:name="android.pe



(Cause GC) – вызывает сборщика мусора, что влечет за собой сборку данных о динамической памяти.



(Update Threads) – включает информацию о запущенных потоках для выбранного процесса.



(Start Method Profiling) и (Stop Method Profiling) – запускает и останавливает запись информации о выполнении методов приложения в Trace-файл, который после остановки записи открывается в Traceview-окне, отображающем журнал выполнения в виде двух панелей: Timeline Panel – с помощью цветовой гаммы и шкалы времени описывает старт и остановку выполнения метода в потоке, Profile Panel – показывает детали выполнения методов. В случае Android-устройств версии 2.1 и ранее для создания Trace-файла требуется наличие SD-карты памяти, а также разрешения <uses-permission android:name="android.permission. WRITE_EXTERNAL_STORAGE»/> в файле манифеста AndroidManifest. xml Android-приложения. За отображение окна Traceview отвечает инструмент traceview набора SDK Tools.






(Stop Process) – останавливает выбранный процесс.



(Screen Capture) – открывает окно Device Screen Capture, которое позволяет создавать скриншоты экрана Android-устройства.



(Dump View Hierarchy for UI Automator) – обеспечивает тестирование GUI-интерфейса приложения путем получения снимка экрана Tablet-устройства API 16 и выше, предоставляя визуальный интерфейс для проверки GUI-иерархии и просмотра свойств отдельных компонентов GUI-интерфейса. Работа команды обеспечивается инструментом uiautomatorviewer набора Android SDK.



(Capture system wide trace using Android systrace) – для устройства Android 4.1 (API Level 16) помогает анализировать производительность приложения, формируя журнал событий системы и приложения в виде HTML-файла.



(Start OpenGL Trace) – для устройства Android 4.1 (API Level 16) – помогает анализировать выполнение графических OpenGL ES команд.



Меню панели инструментов представления Devices, помимо вышеперечисленных команд, содержит команду Reset adb, обеспечивающую перезапуск adb-инструмента.

Представление Emulator Control дает возможность имитировать для экземпляра Android-эмулятора входящий звонок, SMS-сообщение и локализацию.



Списки Voice: и Data: раздела Telephony Status представления Emulator Control позволяют установить состояние GPRS-соединения:

unregistered – сеть отсутствует.

home – локальная сеть.

roaming – телефон в роуминге.

searching – поиск сети.

denied – только звонки экстренных служб.

Список Speed: раздела Telephony Status представления Emulator Control позволяет установить скорость передачи данных сети:

GSM – 14.4 килобит\сек.

HSCSD – от 14.4 до 43.2 килобит\сек.

GPRS – от 40.0 до 80.0 килобит\сек.

EDGE – от 118.4 до 236.8 килобит\сек.

UMTS – от 128.0 до 1920.0 килобит\сек.

HSDPA – от 348.0 до 14400.0 килобит\сек.

Full – без ограничений.

Список Latency: раздела Telephony Status представления Emulator Control позволяет имитировать уровень задержки сети:

GPRS – от 150 до 550 миллисекунд.

EDGE – от 80 до 400 миллисекунд.

UMTS – от 35 до 200 миллисекунд.

None – задержка отсутствует.

Раздел Telephony Actions представления Emulator Control дает возможность имитировать входящий звонок и SMS-сообщение.

Раздел Location Controls представления Emulator Control обеспечивает определение локализации Android-устройства вручную (вкладка Manual) или с помощью файлов GPS eXchange (вкладка GPX) и Keyhole Markup Language (вкладка KML).

Представление LogCat обеспечивает отображение всех системных сообщений от Android-устройства, в то время как представление Console показывает только сообщения, относящиеся к изменениям состояния Android-устройства и его приложений.

LogCat-окно отображает системные сообщения в таблице, содержащей столбцы Level (приоритет сообщения), Time (время создания сообщения), PID (Linux-идентификатор процесса), Application (имя пакета приложения), Tag (идентификатор системного компонента, от которого получено сообщение), Text (текст сообщения). Соответственно панель инструментов представления LogCat обеспечивает фильтрацию отображаемых сообщений по приоритету, тэгу, по идентификатору и имени пакета приложения.

Представление Threads показывает запущенные потоки для выбранного процесса. Для просмотра потоков необходимо в окне Devices выбрать процесс и нажать кнопку Update Threads панели инструментов окна Devices.

Threads-окно отображает информацию о потоках в виде двух таблиц. Верхняя таблица показывает все запущенные потоки для выбранного процесса и имеет следующие столбцы:

ID – Dalvik-идентификатор потока – нечетные числа, начиная с 3. Демоны помечаются «*».

TID – Linux-идентификатор потока.

Status – статус потока:

Wait – вызван метод Object. wait ().

Native – выполняет системный код.

Vmwait – ожидает Dalvik-ресурс.

Runnable – может быть запущен.

TimedWait – ожидает в течение определенного количества времени.

utime – общее время выполнения пользовательского кода (единица 10 мс.).

stime – общее время выполнения системного кода (единица 10 мс.).

Name – имя потока.

Нижняя таблица для выбранного потока показывает выполняемый потоком код, указывая класс, метод, файл, строку и признак кода.

Представление Heap отображает информацию об использовании динамической памяти выбранным процессом. Для просмотра кучи процесса в Heap-окне необходимо в окне Devices выбрать процесс и нажать кнопку Update Heap, затем кнопку Cause GC панели инструментов окна Devices.

Представление Heap содержит три области. Самая верхняя область показывает таблицу структуры кучи процесса со столбцами ID (идентификатор кучи), Heap Size (общее количество памяти кучи), Allocated (количество занятой памяти кучи), Free (количество свободной памяти кучи), %Used (процент занятости кучи) и #Objects (количество объектов кучи), а также имеет кнопку Cause GC обновления информации о куче.

Далее расположена область с таблицей распределения объектов кучи по типам. Самая нижняя область отображает гистограмму распределения выбранного типа объектов по размерам занимаемой памяти.



Представление Allocation Tracker позволяет в реальном времени отследить объекты, для которых выделяется память. Для начала просмотра журнала выделения памяти для объектов необходимо в окне Devices выбрать процесс и нажать кнопку Start Tracking в окне Allocation Tracker, затем кнопку Get Allocations. В результате верхняя область окна Allocation Tracker покажет список объектов, созданных с момента нажатия кнопки Start Tracking до момента нажатия кнопки Get Allocations, с указанием выделенной памяти, идентификатора потока, класса и метода, а нижняя область – более детальную информацию для выбранного объекта, с указанием класса, метода, файла, строки и признака кода.

Представление Network Statistics позволяет сформировать и проанализировать журнал передачи данных по сети.

Представление System Information отображает диаграммы использования системных ресурсов.

Представление File Explorer показывает файловую систему Android-устройства с возможностью экспорта и импорта файлов, удаления файлов и создания новых папок.

Общая настройка DDMS-инструмента осуществляется с помощью раздела Android | DDMS команды Preferences меню Window, где можно определить номер порта, с которого DDMS-инструмент начинает назначать порт для подсоединения Eclipse-отладчика к экземпляру Dalvik-машины по протоколу JDWP, обновление по умолчанию информации о куче и потоках с указанным интервалом, сохранение HPROF-файла или открытие его в среде Eclipse, время ожидания adb-инструмента, adb-хост для связи с Android-устройством по сети.


Перспективы Hierarchy View и Pixel Perfect

Перспективы Hierarchy View и Pixel Perfect запускают инструмент hierarchyviewer набора SDK Tools и отображают его GUI-интерфейс в виде набора Eclipse-представлений, помогая отладить и оптимизировать GUI-интерфейс Android-приложения.

Перспектива Hierarchy View содержит представления Windows, View Properties, Tree View, Tree Overview, Layout View.


Представление Windows отображает список подключенных Android-устройств, для каждого из которых показывает список Activity-объектов, включающий в себя системные объекты и объект приложения, GUI-интерфейс которых отображается на экране Android-устройства.

Представление Tree View показывает иерархию GUI-компонентов графического интерфейса выбранного Activity-объекта. Для просмотра диаграммы иерархии GUI-интерфейса приложения в представлении Tree View, в окне Windows необходимо выбрать Activity-объект приложения и нажать кнопку Load the view hierarchy into the tree view панели инструментов Windows-окна. В результате в окне Tree View отобразится иерархия View-объектов приложения.



Диаграмму окна Tree View можно увеличивать с помощью нижнего ползунка, фильтровать, используя поле Filter by class or id:. Панель инструментов представления Tree View позволяет сохранить отображаемую диаграмму как PNG-изображение, как PSD-документ, открыть выбранный View-объект в отдельном окне и др.

Представление Tree Overview обеспечивает перемещение по диаграмме окна Tree View с помощью перетаскивания выделенного прямоугольника окна Tree Overview.

Окно Layout View является блочным представлением GUI-интерфейса. При выборе компонента диаграммы окна Tree View его расположение в GUI-интерфейсе подсвечивается красным цветом в окне Layout View. Также при выборе View-объекта диаграммы окна Tree View, выше его узла появляется небольшое окно с реальным изображением GUI-компонента и информацией о количестве View-объектов, представляющих компонент, и о времени отображения компонента в миллисекундах. При этом свойства выбранного View-объекта диаграммы отображаются в представлении View Properties.

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

Перспектива Pixel Perfect содержит представления Windows, Pixel Perfect Tree, Pixel Perfect Loup и Pixel Perfect.



Представление Windows отображает список подключенных Android-устройств без детализации. При выборе устройства и нажатии кнопки Inspect a screenshot in the pixel perfect view панели инструментов окна Windows снимок экрана выбранного Android-устройства открывается в представлениях Pixel Perfect Loup и Pixel Perfect. В представлении Pixel Perfect Tree отображается дерево View-объектов GUI-интерфейса приложения, формирующего снимок экрана. При выборе View-объекта в окне Pixel Perfect Tree, его расположение обозначается красной рамкой в окне Pixel Perfect.



Представление Pixel Perfect Loup содержит перекрестье, которое дает информацию о пикселе, находящемся в центре пересечения, включающую в себя HTML-код цвета пикселя, его RGB-значение и координаты. Изображение окна Pixel Perfect Loup можно перемещать мышкой относительно перекрестья. Слайдер Zoom позволяет регулировать увеличение снимка экрана Android-устройства.

Представление Pixel Perfect также содержит перекрестье, расположение которого относительно снимка экрана совпадает с расположением перекрестья окна Pixel Perfect Loup и наоборот. Перекрестье окна Pixel Perfect можно передвигать мышкой, а панель инструментов окна Pixel Perfect дает возможность сохранить снимок экрана как PNG-изображение, а также загрузить поверх снимка экрана другое изображение, представляющее макет GUI-интерфейса приложения, при этом прозрачность загруженного изображения можно регулировать с помощью слайдера Overlay: окна Pixel Perfect Loup.

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

Wizard мастера ADT плагина

Мастер Android Project

Для создания Android-приложения откроем среду Eclipse с инсталлированным ADT-плагином и в меню File выберем команду New | Other | Android | Android Application Project и нажмем кнопку Next.

Введем имя приложения, отображаемое в устройстве, имя проекта, имя пакета. Выберем минимальную версию SDK, предпочтительную версию SDK, версию SDK относительно которой приложение будет компилироваться, тему приложения и нажмем кнопку Next. Оставим отмеченными флажки Create custom launcher icon и Create activity и нажмем кнопку Next. Определим значок приложения и нажмем кнопку Next. Выберем создаваемый Activity-компонент и нажмем кнопку Next:

Blank Activity – экран с надписью «Hello world!».

Blank Activity with Fragment – экран с фрагментом с надписью «Hello world!».

Empty Activity – все равно экран с надписью «Hello world!».

Fullscreen Activity – экран, нажатие на который вызывает переключение между обычным и полноэкранным режимами.

Master/Detail Flow – экран с боковой панелью меню.

Navigation Drawer Activity – экран с двумя фрагментами, панелью навигации и контентом.

Tabbed Activity – экран с вкладками и типом навигации: с помощью жеста Swipe Views (ViewPager), с помощью панели закладок Action Bar Tabs (with ViewPager), с помощью выпадающего списка Action Bar Spinner.

Определим имя Activity-компонента, имя компоновочного файла res/layout/activity_main. xml и нажмем кнопку Finish – в результате будет сгенерирована основа проекта Android-приложения.

Модель программирования Android-приложений основывается не на конструкции с главным классом приложения, имеющим точку входа – статический метод main (), а является компонентной моделью. Android-приложение может состоять из одного или нескольких компонентов, объявленных в файле манифеста приложения AndroidManifest. xml и относящихся к четырем типам:

Activity – расширение класса android.app.Activity, обеспечивающее создание одного окна на экране Android-устройства с формированием в нем GUI-интерфейса.

Service – расширение класса android.app.Service, обеспечивающее выполнение операций без предоставления GUI-интерфейса.

BroadcastReceiver – расширение класса android.content.BroadcastReceiver, отвечающее за прослушивание широковещательных сообщений с запуском других компонентов Android-приложения или выводом уведомлений пользователю в строку статуса.

ContentProvider – расширение класса android.content.ContentProvider, обеспечивающее хранение и извлечение общих данных.

Существующая версия ADT-плагина при создании Android-проекта предлагает формирование основы только Activity-компонента.



Основа самого простого Android-проекта, сгенерированная средой Eclipse, состоит из следующих узлов окна Package Explorer:



...
9