Download - Android осень 2013 лекция 1

Transcript

Android

Лекция №1 «Введение»

Agenda

Почему Android?

Фрагментация

Структура приложения

Ключевые концепции

Исходный код

Android GUI

Многозадачность

Activity

Разметка

Экраны и ресурсы

2

Почему Android?

3

• Свободная платформа - никакой модерации• Open Handset Aliance• Google• Можно делать все что угодно• Постоянно развивается• Быстро растет

Фрагментация

4

Фрагментация - недостатки

Все формы и размеры

Разное качество исполнения

Более пяти версия активны в данный момент

Производители делают свои прошивки

Невозможно протестировать на всех целевых устройствах

5

Фрагментация - достоинства

Охват аудитории

Девайс на любой вкус

Profit!

6

Android Source code

7

Многопоточность

8

UI main thread

ANR

Handler & Looper

Стандартные Java Threads и Runnable

AsyncTasks

Структура приложения

.APK (Android Package)

Classes.dex

Manifest

Resources

9

AndroidManifest.xml

10

Xml

Описание всех компонентов

Permissions

Компоненты

Activity

Service

Content Provider

Broadcast Receiver

11

Activity

• Основной компонент

• Экран с интерфейсом

• Не обязательно весь экран

• Одна activity вызывает другую

• Точка входа в приложение

• Описывается в манифесте

12

Service

Без интерфейса

Фоновый режим

Работа с remote процессами

Application layers

13

Content Provider

Новое слово в мобильной разработке

Шаринг данных

Фасад для хранилищ(БД, Сервер, файловая система и проч.)

Управление данными

14

Broadcast Receiver

Оповещение

Системные

Пользовательские

Могут создавать нотификации

Ресурсоемкие

15

Android GUI

Однопоточный

Управляется событиями

Построен на библиотеке влооженныхкомпонентов

MVC

16

Activity

Life Cycle

Tasks & Back Stack

Manifest

Save instance state

Intents

17

Activity

18

OnCreate(Bundle saveInstanceState)

Вызывается когда создается activity

Получает сохраненное состояние(если оно есть)

Как конструктор

OnResume()

Вызывается перед тем как activity станет видимым пользователю

OnPause()

Вызывается перед тем как у другой activity вызовется onResume()

Здесь все завершающие операции

Не делать долгих операций!

OnStop()

Вызывается, когда activity уже не видима пользователю

onDestroy()

Вызывается перед уничтожением activity

Life Cycle

Tasks & Back Stack

19

Из activity можно вызвать другую activity

Можно вызвать activity другого приложения

Task – коллекция activities, которые складываются в стек

Новая activity пушится в стек, а у предыдущей вызывается onStop()

По кнопке back верхняя activity достается из стека и уничтожается, а у activity под ней вызывается onResume()

Activities в стеке никогда не меняются местами!

Tasks & Back Stack

Task со всеми activities может уйти в background

20

Так как activities никогда не меняют своего положения в стеке, любая activity можетиметь в стеке несколько инстансов

Activity in Manifest

21

Saving activity state

22

Saving instance state

Если выйти из приложения по кнопке “Home”, или запустить другую activity, то предыдущая activity остается в памяти, поэтому когда (если) вы вернетесь в нее она полностью восстановит свое состояние

Система может убить activity в back stack

Пользователь ничего об этом не знает

onSaveInstanceState(Bundle outState)

Восстановит только если activity была убита системой!(кнопка Back не считается)

Существует реализация по умолчанию

Вызовется перед onStop()

Не использовать для хранения данных!

23

Intents

Сообщение

Объект, содержащий описание запрашиваемой операции

Объект, оповещающий о произошедшем событии

Запуск activity, service

Бывают явные и неявные

Обычно содержит:

Название компонента, который должен его обработать(com.example.project.app.FreneticActivity)

Action – строка, описывающая действие, которое должно произойти или произошло(Receivers)

Есть предопределенные и пользовательские actions

Data – URI, сильно зависит от action

Category – информация, описывающая вид компонента, который должен обработать intent(CATEGORY_LAUNCHER)

Extras – самые разнообразные данные в виде Key-value pairs

24

Intents

Явные(Explicit) интенты:

Адресуются конкретному компоненту(с помощью component name)

Обычно используется для запуска внутренних компонентов

Неявные(Implicit) интенты:

Не имеют конкретного адресата

Обычно используются для для запуска компонентов сторонних приложений

Система находит наиболее подходящие компоненты(или несколько)

25

Intent Filters

Объявляются в манифесте

Intent должен пройти три теста, чтобы android отдал его компоненту:

Action test

Category test

Data test

Если один из тестов не пройдет – компонент не получитIntent

26

Разметка

Определяет порядок расположения элементов интерфейса

Обычно создается с помощью xml

Разделение представления и логики

Большое количество layouts в библиотеке android

27

Разметка

28

LinearLayout

29

Gravity

android:gravity – расположение контента внутри контейнера

android:layout_gravity – расположение относительно родителя

30

Layout Weight

Параметр android:layout_weight позволяет распределять пространство между компонентами в долевом отношении

Если используются вес, то соответствующее измерение компонента должно равняться 0

space assign to child = (child individual weight) / (sum of weight of every child in Linear Layout)

По умолчанию вес = 0, это означает, что элемент займет минимум места, которого потребует контент

Не использовать weight во вложенных linearLayout!

31

Multiple screens

Огромное количество экранов с разными размерами, ориентацией, разрешениями и проч.

Android предоставляет методы для удобной организации ресурсов

32

Multiple screens

33

Размер экрана(физический размер)

Screen density(dpi - точек на дюйм) – low, medium, high, extra high

Ориентация(портрет, ландшафт)

Разрешение(не работаем с разрешением)

Density-independent pixel(dp) – виртуальный пиксель

1 dp = 1px на 160dpi экране – medium экран

px = dp * (dpi / 160) – например на экране 240dpi 1dp=1.5px

Всегда использовать dp, и никогда px

Основные понятия

Multiple screens

34

Density independence

Multiple screens

35

Все только в dp

Разные layout для разных размеров экранов(small, normal, large, xlarge)

Разные изображения для экранов с разной плотностью

Использовать квалификаторы

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/guide/topics/resources/providing-resources.html

Правила

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