35
ОС Android и специфика мобильной разработки Киреев Артем, Codemasters International [email protected] www.codemastersintl.com

Лекция Android

Embed Size (px)

DESCRIPTION

Мы рассмотрим область применения, архитектуру и основные особенности такой известной операционной системы как Android. Также расскажем о процессе создания мобильного приложения TulaDev, о проблемах с которыми мы столкнулись и о способах их решения. Вы можете найти приложение для Android на Google Play

Citation preview

Page 1: Лекция Android

ОС Android и специфика мобильной

разработки

Киреев Артем, Codemasters International [email protected]

www.codemastersintl.com

Page 2: Лекция Android

План

•Что такое Android?

•Основные компоненты приложения и их взаимодействие

•Опыт разработки приложения TulaDev: веб-сервисы, GCM (C2DM).

Page 3: Лекция Android

OS Android

•ОС для смартфонов и встраиваемых систем

•Разработка началась в 2003

•Первый проданный телефон HTC Dream 2008

•Open Source

•ARM, MIPS, x86

Page 4: Лекция Android

OS Android

Page 5: Лекция Android

Что нужно чтобы начать разрабатывать под Android?

•Любая ОС (Windows, Linux, OS/X)

•JDK (Java Development Kit)

•Android SDK:

•Emulator

•ADB (Android Debug Bridge)

•Eclipse with Android ADT plugin (or Jetbrains IDEA, ...)

Page 6: Лекция Android

Версии Android

Page 7: Лекция Android

Размеры экрановРазмер Плотность

470dip x 320 dip = WVGA800 (480x800)

Самый популярный размер:

Page 8: Лекция Android

Как работать с множеством экранов?

px - пикселиin, mm, pt - дюймы, миллиметры, точки (1/72 дюйма)dip - Абстрактные пиксели, зависящие от плотности экранаsp - Похожи на dip, но в данном случае учитывается размер шрифта, который установил пользователь.

ldpi: 1 dip = 0,75px mdpi: 1 dip = 1pxhdpi: 1 dip = 1,5pxxhdpi: 1 dip = 2px

Page 9: Лекция Android

Из чего состоит приложение?

Manifest-имя JAVA пакета-разрешения для приложения- Activity, Services..-Связанные библиотеки-Минимальный уровень APIКлассы (src)

Ресурсы (res)

Page 10: Лекция Android

Верстка UI<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TextView android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="I am a TextView" />

<Button android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="I am a Button" />

</LinearLayout>

Linear Layout

Элементы внутри расположены в

ряд или в столбец

Relative LayoutПозволяет

определить расположение

элементов относительно друг друга (Элемент A

находится слева от B)

Page 11: Лекция Android

Изолированность приложения

Android

• Каждое приложение имеет свой Linux user Id

• Для каждого приложения запускается своя Dalvik VM

• Любой компонент приложения, будет запускаться в своем Linux процессе

Sandbox

Page 12: Лекция Android

Рабочие лошадки приложения

Activity

• малосвязанные

• не подходят для длительных операций

Service

• работают в фоне (backgroud)

• подходят для длительных операций

Page 13: Лекция Android

Activity Service

Page 14: Лекция Android

Взаимодействие

Component nameActionDataCategoryExtrasFlags

Intent

* можем создать свой Action• Explicit intent: startActivity, startService, passData

• Implicit intent: internet on/off, screen off, battery low

Page 15: Лекция Android

Intent filtersСлужат для фильтрации implicit

intents

Page 16: Лекция Android

Explicit and Implicit examples

MainListActivity DetailActivity

intent (explicit): component:DetailActivity

DownloadImageService

intent (explicit): component:DownloadImageServiceaction: com.mycorporation.myapp,downloaddata: http://clipart.com/awesome.jpg

BroadcastReceiveBroadcastReceiverr

BroadcastReceiveBroadcastReceiverr

broadcast intent (implicit):broadcast intent (implicit):component: nullcomponent: nullaction: action: com.mycorporation.myapp.completecom.mycorporation.myapp.complete

Page 17: Лекция Android

Разработка приложения TulaDev

для Android• Видеть информацию о следующей

встрече

• Видеть архив прошедших встреч

• Получать новости и анонсы

Use cases:

• Голосовать за будущие темы

• Отмечаться на встрече (розыгрыш призов)

• Смотреть слайды оффлайн

Page 18: Лекция Android

https://play.google.com/store/apps/details?id=com.codemasters.tuladev

Page 19: Лекция Android

Разработка приложения TulaDev

для AndroidВопрос 1. Откуда брать данные

для отображения?

Page 20: Лекция Android

Откуда брать данные. Схема 1. Activity шлет запрос

REST APIhttp GET /events

ListActivity

Page 21: Лекция Android

Откуда брать данные. Схема 2. Activity шлет запрос и

сохраняет в базе

ListActivity

SQLite

2 http GET /events

3 storeEventsInDb()

1 getEventsFromDb()

REST API

Page 22: Лекция Android

Откуда брать данные. Схема 3 Используем сервис

ListActivity

DownloadService

REST API

SQLite

6 getEventsFromDb()

2 startDownloadEvents()

3 http GET /events

4 storeEventsInDb()

5 broadcast complete intent

BroadcastReceiveBroadcastReceiverr

1 getEventsFromDb()

Page 23: Лекция Android

Разработка приложения TulaDev

для AndroidВопрос 2. Как часто обновлять данные?При каждом запуске приложения

При смене табов

По расписанию

По требованию пользователя

Когда данные обновятся на сервере

Page 24: Лекция Android

Разработка приложения TulaDev

для AndroidПо требованию пользователя

Когда данные обновятся на сервере

Http pooling

web sockets

Page 25: Лекция Android

Google Cloud Messaging

GCM анонсирован 26 июня 2012 года, пришел на замену C2DM

Увеличивает время жизни батареи (все приложения используют один общий канал)Сервер обрабатывает запрос на рассылку за 4.7 миллисекундыМы используем его обновления данных и для поста новостей

Page 26: Лекция Android

Как работает GCMОбновление данных

Server

1 Registration request

2 RegistrationId

3 Pass registrationId to TulaDev

4 о

бн

овл

ен

ие н

а се

рвере 5

Mes

sage

Content-Type:application/jsonAuthorization:key=AIzaSyB-1uEai2...{ “registration_ids” : [“APA91bHun4MxP5eg..., ...] “collapse_key”: “data_update” “data” : { “Action” : “updateData”}}6 M

essage to device

7 http GET /api/events

Page 27: Лекция Android

Как работает GCMУведомления (новости)

Server

1 п

ост

новост

и

2 M

essa

ge

Content-Type:application/jsonAuthorization:key=AIzaSyB-1uEai2...{ “registration_ids” : [“APA91bHun4MxP5eg..., ...] “data” : { “Action” : “updateData”,“Data”: “Не проспите завтра наш доклад об Android ”}}

3 Message to device

Page 28: Лекция Android

Как работает GCMFeatures. Reliability

Page 29: Лекция Android

Как работает GCMFeatures. Time To Live

Сообщениям можно задать время жизни от 0 секунд до 4 недель

Сообщения с TTL = 0, не хранятся в GCM

По умолчанию TTL = 4 недели

Page 30: Лекция Android

Как работает GCMFeatures. Message

Multicasting

Запрос

до1000

Ответ

Page 31: Лекция Android

Как работает GCMFeatures. Collapse Key

Запросы

только 1 сообщение

Page 32: Лекция Android

Как работает GCMFeatures. Throttling

Нотификация об изменении данных на сервере

Server

DoS

Page 33: Лекция Android

Google Play

Регистрация в качестве разработчика = 25$

Время от подачи заявки до появления в Google Play ~ 4h

No Problem with Google Play

Page 34: Лекция Android

Итоги

•Android - OpenSource операционная система с Dalvik VM

•Приложение: Манифест + ресурсы + Activity + Service

•GCM (Google Cloud Messaging) - канал доставки данных.

•Google Play - 25$ and no problem

Page 35: Лекция Android

Вопросы?

Спасибо за внимание