Лекция Android
-
Upload
pavel-tsukanov -
Category
Technology
-
view
943 -
download
0
description
Transcript of Лекция Android
![Page 1: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/1.jpg)
ОС Android и специфика мобильной
разработки
Киреев Артем, Codemasters International [email protected]
www.codemastersintl.com
![Page 2: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/2.jpg)
План
•Что такое Android?
•Основные компоненты приложения и их взаимодействие
•Опыт разработки приложения TulaDev: веб-сервисы, GCM (C2DM).
![Page 3: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/3.jpg)
OS Android
•ОС для смартфонов и встраиваемых систем
•Разработка началась в 2003
•Первый проданный телефон HTC Dream 2008
•Open Source
•ARM, MIPS, x86
![Page 4: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/4.jpg)
OS Android
![Page 5: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/5.jpg)
Что нужно чтобы начать разрабатывать под 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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/6.jpg)
Версии Android
![Page 7: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/7.jpg)
Размеры экрановРазмер Плотность
470dip x 320 dip = WVGA800 (480x800)
Самый популярный размер:
![Page 8: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/8.jpg)
Как работать с множеством экранов?
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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/9.jpg)
Из чего состоит приложение?
Manifest-имя JAVA пакета-разрешения для приложения- Activity, Services..-Связанные библиотеки-Минимальный уровень APIКлассы (src)
Ресурсы (res)
![Page 10: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/10.jpg)
Верстка 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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/11.jpg)
Изолированность приложения
Android
• Каждое приложение имеет свой Linux user Id
• Для каждого приложения запускается своя Dalvik VM
• Любой компонент приложения, будет запускаться в своем Linux процессе
Sandbox
![Page 12: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/12.jpg)
Рабочие лошадки приложения
Activity
• малосвязанные
• не подходят для длительных операций
Service
• работают в фоне (backgroud)
• подходят для длительных операций
![Page 13: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/13.jpg)
Activity Service
![Page 14: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/14.jpg)
Взаимодействие
Component nameActionDataCategoryExtrasFlags
Intent
* можем создать свой Action• Explicit intent: startActivity, startService, passData
• Implicit intent: internet on/off, screen off, battery low
![Page 15: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/15.jpg)
Intent filtersСлужат для фильтрации implicit
intents
![Page 16: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/17.jpg)
Разработка приложения TulaDev
для Android• Видеть информацию о следующей
встрече
• Видеть архив прошедших встреч
• Получать новости и анонсы
Use cases:
• Голосовать за будущие темы
• Отмечаться на встрече (розыгрыш призов)
• Смотреть слайды оффлайн
![Page 18: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/18.jpg)
https://play.google.com/store/apps/details?id=com.codemasters.tuladev
![Page 19: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/19.jpg)
Разработка приложения TulaDev
для AndroidВопрос 1. Откуда брать данные
для отображения?
![Page 20: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/20.jpg)
Откуда брать данные. Схема 1. Activity шлет запрос
REST APIhttp GET /events
ListActivity
![Page 21: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/21.jpg)
Откуда брать данные. Схема 2. Activity шлет запрос и
сохраняет в базе
ListActivity
SQLite
2 http GET /events
3 storeEventsInDb()
1 getEventsFromDb()
REST API
![Page 22: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/22.jpg)
Откуда брать данные. Схема 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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/23.jpg)
Разработка приложения TulaDev
для AndroidВопрос 2. Как часто обновлять данные?При каждом запуске приложения
При смене табов
По расписанию
По требованию пользователя
Когда данные обновятся на сервере
![Page 24: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/24.jpg)
Разработка приложения TulaDev
для AndroidПо требованию пользователя
Когда данные обновятся на сервере
Http pooling
web sockets
![Page 25: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/25.jpg)
Google Cloud Messaging
GCM анонсирован 26 июня 2012 года, пришел на замену C2DM
Увеличивает время жизни батареи (все приложения используют один общий канал)Сервер обрабатывает запрос на рассылку за 4.7 миллисекундыМы используем его обновления данных и для поста новостей
![Page 26: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/26.jpg)
Как работает 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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/27.jpg)
Как работает 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](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/28.jpg)
Как работает GCMFeatures. Reliability
![Page 29: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/29.jpg)
Как работает GCMFeatures. Time To Live
Сообщениям можно задать время жизни от 0 секунд до 4 недель
Сообщения с TTL = 0, не хранятся в GCM
По умолчанию TTL = 4 недели
![Page 30: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/30.jpg)
Как работает GCMFeatures. Message
Multicasting
Запрос
до1000
Ответ
![Page 31: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/31.jpg)
Как работает GCMFeatures. Collapse Key
Запросы
только 1 сообщение
![Page 32: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/32.jpg)
Как работает GCMFeatures. Throttling
Нотификация об изменении данных на сервере
Server
DoS
![Page 33: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/33.jpg)
Google Play
Регистрация в качестве разработчика = 25$
Время от подачи заявки до появления в Google Play ~ 4h
No Problem with Google Play
![Page 34: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/34.jpg)
Итоги
•Android - OpenSource операционная система с Dalvik VM
•Приложение: Манифест + ресурсы + Activity + Service
•GCM (Google Cloud Messaging) - канал доставки данных.
•Google Play - 25$ and no problem
![Page 35: Лекция Android](https://reader036.fdocuments.net/reader036/viewer/2022062418/556cc9a4d8b42aba548b503b/html5/thumbnails/35.jpg)
Вопросы?
Спасибо за внимание