Авторизация

OpenID



Напомнить пароль
Регистрация
-->

Переводы англ. мануалов по AndroidОсновы программирования(перевод)

Основы программирования.
Приложения Android пишутся на языке программирования Java. Компилированный Java код, вместе с файлами данных и ресурсов, требуемых приложению, объединяется в Android пакет — архивный файл с расширением .apk. Этот файл предназначен для распространения приложений и установке их на мобильные устройства; этот файл пользователи закачивают на свои устройства. Весь код в одном .apk файле составляет одно приложение.

В большинстве случаев, каждое Android приложение живет в своем собственном мире:

  • По умолчанию, каждое приложение работает в собственном Linux процессе. Android стартует процесс когда нужно выполнить код любого приложения, и останавливает процесс когда в нем больше нет надобности или системные ресурсы требуются другим приложениям.
  • Каждый процесс имеет собственную виртуальную машину Java (VM), таким образом, код приложения выполняется изолировано от других приложений.
  • По умолчанию, каждому приложению присваивается уникальный пользовательский идентификатор Linux ID. Права доступа устанавливаются так, что файлы приложения видны только этому пользователю, только самому приложению, хотя существует способ экспортировать их в другие приложения.

Это достигается присвоением одного общего пользовательского ID двум приложениям, в этом случае они будут видеть файлы друг друга. Для сохранения системных ресурсов, приложения с одинаковым ID могут также работать в одном Linux процессе, разделяя одну VM.
Компоненты приложения

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

Для такой функциональности система должна уметь запускать процесс, когда требуется любая его часть и инициализировать часть Java объекта. Поэтому, в отличие от большинства других систем, приложения Android не имеют единственной точки входа в приложение (например, нет функции main()). Вместо этого, они состоят из компонентов, которые система может инициализировать и выполнять по необходимости. Существует четыре компонента:
Activities
«Деятельность» представляют визуальный интерфейс, сосредоточенный на выполнении одной задачи пользователя. Например, «деятельность» может представлять список элементов меню, из которых выбирает пользователь, или может показать фотографии с заголовками. Приложения для передачи текстовых сообщений могут иметь одну «деятельность» для показа списка контактов, которым можно передать сообщение, вторую «деятельность» для редактирования сообщения перед отправкой выбранному контакту, и другие «деятельности» для просмотра старых сообщений или изменения настроек. Работая вместе, они создают законченный пользовательский интерфейс, где каждая «деятельность» взаимосвязана с другими. Все они реализованы как субклассы базового класса Activity.

Приложение может состоять всего из одной «деятельности» или, подобно приложению для передачи сообщений, из нескольких. Какие это «деятельности» и как много их нужно зависит, конечно, от типа приложения и его дизайна. Обычно, одна «деятельности» помечается как «первая», т.е. показываемая пользователю, когда он запускает приложение. Переход от одной «деятельности» к другой происходит, когда текущая «деятельность» запускает следующую.

Каждая «деятельность» имеет окно для отображения. Обычно, окно занимает весь экран, но может быть и меньше размеров и «плавать» поверх другого окна. «Деятельность» может также иметь дополнительные окна, например, всплывающие диалоги, требующие реакции пользователя посреди текущей задачи, или окна, представляющие некоторую информацию затребованную пользователем.

Визуальные компоненты окно составляют иерархию визуальных элементов — объектов произведенных из базового класса View. Каждый видимый элемент занимает конкретное пространство окна. Родительский вид включает и организовывает размещение своих потомков. Конечные визуальные элементы (расположенные внизу иерархии) рисуют в прямоугольнике, который они контролируют, и отвечают на действия пользователя в нем. Таким образом, визуальные элементы — это инструменты для взаимодействия «деятельности» с пользователем. Например, визуальный элемент может отобразить маленькую картинку и начать некоторое действие, когда пользователь эту картинку выберет. Android имеет несколько готовых визуальных элементов, которые Вы можете использовать, включая кнопки, текстовые поля, линейки прокрутки, элементы меню, чекбоксы и другие.

Иерархия элементов интерфейса размещается в окне «деятельности» методом Activity.setContentView(). Содержащий элемент это View-объект в корне иерархии. (Смотри Пользовательский интерфейс для большей информации.)

Services
Службы не имеют визуального интерфейса, так как они работают в фоновом режиме неопределенный период времени. Например, служба может проигрывать фоновую музыку, когда пользователь занят другими делами, или может получать данные из сети или что-то вычислять и представлять результат «действию» когда он требуется. Каждая служба наследуется от базового класса Service.

Простейший пример – это медиаплеер для проигрывания музыки из списка песен. Программа плеера должна иметь одну или больше «деятельность», дающую возможность пользователю выбрать список песен и начать проигрывание. Однако, самовоспроизведение не требует наличие выполняющейся «деятельности», т.к. пользователь ожидает проигрывания музыки и после переключения на другую задачу. Для этого плеер должен запустить фоновую службу. Система продолжит воспроизведение музыки после выхода из запустившей ее «деятельности».

Можно присоединиться (связаться) к уже работающей службе (или запустить ее, если она еще не работала). При соединении, Вы можете взаимодействовать со службой через управляющий интерфейс. Для музыкальной службы, этот интерфейс предоставит возможность сделать паузу, остановить, перемотать и возобновить воспроизведение.

Подобно «деятельностям» и другим компонентам, службы работают в основной нити процесса приложения. Чтобы они не заблокировали другие компоненты или интерфейс, для долгих, ресурсозатратных задач создается отдельная нить (как для проигрывания музыки). Смотри Процессы и нити далее.

Broadcast receivers
Подписчики широковещательных сообщений – это компоненты, которые ничего не делают, но получают и реагируют на широковещательные сообщения. Большинство сообщений порождается системой, например, сообщение о смене временной зоны, низком уровне заряда батареи, фотографировании или смене языковых настроек пользователем. Приложения тоже могут передавать широковещательные сообщения, например, сообщать другим приложениям о закачке нужных данных на устройство и их доступности для использования.

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

Подписчики не имеют интерфейса пользователя. Однако, они могут запускать «деятельности» в ответ на полученную ими информацию или они могут использовать NotificationManager для предупреждения пользователя. Предупреждение можно сделать различными способами — миганием подсветки, вибрацией устройства, звуком и т.д. Они обычно помещают соответствующую иконку в полосе состояния, нажав на которую пользователь откроет предупреждающее сообщение.

Content providers
Поставщики содержимого – делают специальный набор данных приложении доступным для других приложений. Данные могут храниться в файловой системе, в SQLite базе данных, или в любой другой подходящей форме. Поставщики наследуются от базового класса ContentProvider, реализующего стандартный набор методов для получения и сохранения данных заданного типа. Однако, приложение не может вызывать эти методы напрямую. Вместо этого они используют ContentResolver объект и его методы. ContentResolver может взаимодействовать с любым поставщиком содержимого. Он сотрудничает с поставщиком для управления требуемыми межпроцессными коммуникациями.

Смотри Поставщики содержимого для большей информации.

Каждый раз, когда требуется конкретный компонент, Android проверяет, что нужный процесс приложения запущен (запускает его при необходимости) и что нужный экземпляр компонента доступен (при необходимости создает его).

Оригинальный текст тут
  • 0
  • admin
  • 09 мая 2010, 02:09

Комментарии (0)

RSS свернуть / развернуть

комментировать

Ваше имя
Ваш e-mail (будет скрыто и используется только для отправки ответов на ваш комментарий)
Вы — гость, и вам запрещено использовать HTML-теги.
 
Введите цифры и буквы:



Блоги, Переводы англ. мануалов по Android, Основы программирования(перевод)