З чого почати Android-
     розробнику
Питання
• На що схожий додаток для Android?
• З яких компонентів його можна
  побудувати?
• Як організувати роботу додатку?
Android Application



                           Це ви

Контакти
Android Application
• Програми взаємодіють між
  собою, формують одне середовище
• Відсутність однієї точки входу

           int main() {
             printf(“Hello World”);
           }
Стандартна система з плагінами




           Стандартна схема організації плагінів
      http://en.wikipedia.org/wiki/Plug-in_(computing)
Android (з плагінами)
Android System


                          Application

       System
       Services


       Package
       Manager



                  Components
                   Interface
Android (з плагінами)
Android System


                              Application

       System
       Services


       Package
       Manager



                      Components
                       Interface

                  4 типи компонентів
Компоненти
•   Активності (Activities)
•   Сервіси (Services)
•   Контент-провайдери (Content Providers)
•   Отримувачі широкомовних повідомлень
    (Broadcast Receivers)



                  Читаємо http://developer.android.com/guide/topics/fundamentals.html
Компоненти
•   Активності (Activities)
•   Сервіси (Services)
•   Контент-провайдери (Content Providers)
•   Отримувачі широкомовних повідомлень
    (Broadcast Receivers)
Активності та задачі
Активність N

     .
     .
     .

                  Задача
Активність 2


Активність 1


   Стек
Активності та задачі
Купівля                                                                          Поділитися

Інформація про ап                                                                Повний текст

Пошук                                                                            Список новин
                                                                                   Почитати новини
Пропозиції на
головній сторінці
Встановити новий ап




                    Читаємо http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
Активності та задачі
Купівля                                                                          Поділитися

Інформація про ап                                                                Повний текст

Пошук                                                                            Список новин
                                                                                   Почитати новини
Пропозиції на
головній сторінці
Встановити новий ап

                                                                       Активність




                    Читаємо http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
Активність
  Перегляд списку новин




      +


      =
   Activity
Активність
                                                           View
                                                           ViewGroup

                    LinearLayout




TextView    RelativeLayout                RelativeLayout

                                                …


ImageView     TextView             TextView
Активність - GUI
setContentView(view)


                       LinearLayout                                  TextView


                                                                         TextView
                                                             Image
 TextView      RelativeLayout
                                                              View       TextView
                                            RelativeLayout

                                                  …                      TextView
                                                             Image
 ImageView       TextView             TextView                View       TextView




   Дерево може бути описане за допомогою XML
Ресурси
•   Графіка (drawable)
•   Тексти (string)
•   Стилі (style)
•   Розмітка (layout)
•   та ще дуже багато
    (dimen, color, string-array, …)

                    Читаємо http://developer.android.com/guide/topics/resources/index.html
Конфігурація
•   Орієнтація екрану
•   Локаль
•   Оператор
•   Розмір екрану
•   Густина пікселів
•   …
Життєвий цикл активності
• Пам’ятаємо про:
  – активність має стан, який змінюється під час
    роботи користувача з нею
  – активність може бути знищена за ініціативи
    системи
  – при цьому потрібно зберегти стан
  – View вміють зберігати свій стан

• Найбанальніший приклад знищення
  активності: переворот екрану (зміна
  конфігурації).
Фрагменти
• Великий екран – великі зміни
• Основний великий будівельний блок
  вашого апа
• Ще цікавіший життєвий цикл
• Взаємодію між фрагментами слід
  здійснюватися через активність
Фрагменти


Активність з
  одним           A                      B
фрагментом




                Список                Детальна
               елементів             інформація


                           Телефон
Фрагменти



A                B




       Планшет
Взаємодія між фрагментами
                           ListFragmentListener
                           + onItemSelected(…)                   MyListFragment


                                                  public void onAttach(…) {
    OneFragmentActivity                             this.listener =
                                                      (ListFragmentListener)activity;
                                                  }
void onItemSelected(…) {
  startActivity(…)                                public void onDetach() {
                           DualFragmentActivity     this.listener = null;
}
                                                  }

                void onItemSelected(…) {          void onListItemClick(…) {
                  fragmentManager                   this.listener.onItemSelected(…);
                    .beginTransaction()           }
                      // modify fragments
                    .commit();
                }
Як запускається активність?
    Активність – це компонент
Активація компонентів
• Intent
   – data URI, type    дані, над якими працюємо
   – action            дія, яку потрібно виконати
   – extras         додаткові параметри (ключ - значення)

• Набрати номер:
  data   = „tel:+38093XXXXXXX‟
  action = Intent.ACTION_VIEW
       або Intent.ACTION_CALL (вимагає окремого дозволу)

• Перейти до карти
  data   = „geo:49.91667,36.31667?z=12‟
  action = Intent.ACTION_VIEW

• Відправити листа, твіт, пост у фейсбук:
  Intent.ACTION_SEND + extras
Маніфест
• Основна функція: описати власні
  компоненти та вказати, як вони можуть
  активуватися ззовні
• Вказує вимоги вашого апа до апаратури та
  версії Android
• Перелічує дозволи, які користувач повинен
  буде надати апу
Підміняємо сайт на свій додаток
<activity android:name=".activity.BrowserInterceptorActivity”>
  <intent-filter>

   <!– Фільтр для Intent.action -->
   <action android:name="android.intent.action.VIEW" />
   <!– Фільтр для Intent.category -->
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />

   <!– Фільтр для Intent.data (URI) -->
   <data
     android:scheme="http"
     android:host=”example.com"
     android:pathPattern="/profile/.*"
     />

  </intent-filter>
</activity>
Компоненти
•   Активності (Activities)
•   Сервіси (Services)
•   Контент-провайдери (Content Providers)
•   Отримувачі широкомовних повідомлень
    (Broadcast Receivers)
Сервіси
• Не пов’язані з UI напряму
• Фонові задачі: програвання
  музики, завантаження даних
• Як правило, взаємодію з API якогось
  сервера бажано реалізовувати через сервіс
• Простіший життєвий цикл (суб’єктивно!)
• Два типи: з підв’язкою, виконання команд
Компоненти
•   Активності (Activities)
•   Сервіси (Services)
•   Контент-провайдери (Content Providers)
•   Отримувачі широкомовних повідомлень
    (Broadcast Receivers)
Контент-провайдери                       query
                                                      insert
• Надають доступ до вашого                            update
  набору даних                                        delete
 content://my.content.authority/place/345
                authority, визначається в маніфесті

• Інші компоненти працюють з ними через
  ContentResolver
• Приклад стандартного провайдера:
  контакти
Компоненти
•   Активності (Activities)
•   Сервіси (Services)
•   Контент-провайдери (Content Providers)
•   Отримувачі широкомовних повідомлень
    (Broadcast Receivers)
Broadcast Receiver
• Зміна часового поясу
• Завантаження системи
• Вимкнення телефону

Для того, щоб зробити розумні сервіси:
• Зміна стану заряду батареї
• Підключення «зарядки»
І ще одна дуже важлива річ…
Головний потік та асинхронні задачі
• Виклики методів життєвого циклу завжди
  виконуються в основному потоці (слідкуйте
  за ANR!)
• AsyncTask – винесення операції в окремий
  потік
• AsyncQueryHandler – запити до контент
  провайдера в окремому потоці
• Все це працює через Handler
Користуйтеся StrictMode!
StrictMode.setThreadPolicy(
  new StrictMode.ThreadPolicy.Builder()
    .detectAll()
    .penaltyLog()
    .build()
);
StrictMode.setVmPolicy(
  new StrictMode.VmPolicy.Builder()
    .detectAll()
    .penaltyLog()
    .build()
);
Ваша черга!

Роман Мазур
Керівник Android/Java відділу Stanfy

rmazur@stanfy.com.ua
Skype: roman.mazur.f

MPD2011 | Роман Мазур "С чего начать Android разработчику"

  • 1.
    З чого початиAndroid- розробнику
  • 2.
    Питання • На щосхожий додаток для Android? • З яких компонентів його можна побудувати? • Як організувати роботу додатку?
  • 3.
    Android Application Це ви Контакти
  • 4.
    Android Application • Програмивзаємодіють між собою, формують одне середовище • Відсутність однієї точки входу int main() { printf(“Hello World”); }
  • 5.
    Стандартна система зплагінами Стандартна схема організації плагінів http://en.wikipedia.org/wiki/Plug-in_(computing)
  • 6.
    Android (з плагінами) AndroidSystem Application System Services Package Manager Components Interface
  • 7.
    Android (з плагінами) AndroidSystem Application System Services Package Manager Components Interface 4 типи компонентів
  • 8.
    Компоненти • Активності (Activities) • Сервіси (Services) • Контент-провайдери (Content Providers) • Отримувачі широкомовних повідомлень (Broadcast Receivers) Читаємо http://developer.android.com/guide/topics/fundamentals.html
  • 9.
    Компоненти • Активності (Activities) • Сервіси (Services) • Контент-провайдери (Content Providers) • Отримувачі широкомовних повідомлень (Broadcast Receivers)
  • 10.
    Активності та задачі АктивністьN . . . Задача Активність 2 Активність 1 Стек
  • 11.
    Активності та задачі Купівля Поділитися Інформація про ап Повний текст Пошук Список новин Почитати новини Пропозиції на головній сторінці Встановити новий ап Читаємо http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
  • 12.
    Активності та задачі Купівля Поділитися Інформація про ап Повний текст Пошук Список новин Почитати новини Пропозиції на головній сторінці Встановити новий ап Активність Читаємо http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
  • 13.
    Активність Переглядсписку новин + = Activity
  • 14.
    Активність View ViewGroup LinearLayout TextView RelativeLayout RelativeLayout … ImageView TextView TextView
  • 15.
    Активність - GUI setContentView(view) LinearLayout TextView TextView Image TextView RelativeLayout View TextView RelativeLayout … TextView Image ImageView TextView TextView View TextView Дерево може бути описане за допомогою XML
  • 16.
    Ресурси • Графіка (drawable) • Тексти (string) • Стилі (style) • Розмітка (layout) • та ще дуже багато (dimen, color, string-array, …) Читаємо http://developer.android.com/guide/topics/resources/index.html
  • 17.
    Конфігурація • Орієнтація екрану • Локаль • Оператор • Розмір екрану • Густина пікселів • …
  • 18.
    Життєвий цикл активності •Пам’ятаємо про: – активність має стан, який змінюється під час роботи користувача з нею – активність може бути знищена за ініціативи системи – при цьому потрібно зберегти стан – View вміють зберігати свій стан • Найбанальніший приклад знищення активності: переворот екрану (зміна конфігурації).
  • 19.
    Фрагменти • Великий екран– великі зміни • Основний великий будівельний блок вашого апа • Ще цікавіший життєвий цикл • Взаємодію між фрагментами слід здійснюватися через активність
  • 20.
    Фрагменти Активність з одним A B фрагментом Список Детальна елементів інформація Телефон
  • 21.
    Фрагменти A B Планшет
  • 22.
    Взаємодія між фрагментами ListFragmentListener + onItemSelected(…) MyListFragment public void onAttach(…) { OneFragmentActivity this.listener = (ListFragmentListener)activity; } void onItemSelected(…) { startActivity(…) public void onDetach() { DualFragmentActivity this.listener = null; } } void onItemSelected(…) { void onListItemClick(…) { fragmentManager this.listener.onItemSelected(…); .beginTransaction() } // modify fragments .commit(); }
  • 23.
    Як запускається активність? Активність – це компонент
  • 24.
    Активація компонентів • Intent – data URI, type дані, над якими працюємо – action дія, яку потрібно виконати – extras додаткові параметри (ключ - значення) • Набрати номер: data = „tel:+38093XXXXXXX‟ action = Intent.ACTION_VIEW або Intent.ACTION_CALL (вимагає окремого дозволу) • Перейти до карти data = „geo:49.91667,36.31667?z=12‟ action = Intent.ACTION_VIEW • Відправити листа, твіт, пост у фейсбук: Intent.ACTION_SEND + extras
  • 25.
    Маніфест • Основна функція:описати власні компоненти та вказати, як вони можуть активуватися ззовні • Вказує вимоги вашого апа до апаратури та версії Android • Перелічує дозволи, які користувач повинен буде надати апу
  • 26.
    Підміняємо сайт насвій додаток <activity android:name=".activity.BrowserInterceptorActivity”> <intent-filter> <!– Фільтр для Intent.action --> <action android:name="android.intent.action.VIEW" /> <!– Фільтр для Intent.category --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!– Фільтр для Intent.data (URI) --> <data android:scheme="http" android:host=”example.com" android:pathPattern="/profile/.*" /> </intent-filter> </activity>
  • 27.
    Компоненти • Активності (Activities) • Сервіси (Services) • Контент-провайдери (Content Providers) • Отримувачі широкомовних повідомлень (Broadcast Receivers)
  • 28.
    Сервіси • Не пов’язаніз UI напряму • Фонові задачі: програвання музики, завантаження даних • Як правило, взаємодію з API якогось сервера бажано реалізовувати через сервіс • Простіший життєвий цикл (суб’єктивно!) • Два типи: з підв’язкою, виконання команд
  • 29.
    Компоненти • Активності (Activities) • Сервіси (Services) • Контент-провайдери (Content Providers) • Отримувачі широкомовних повідомлень (Broadcast Receivers)
  • 30.
    Контент-провайдери query insert • Надають доступ до вашого update набору даних delete content://my.content.authority/place/345 authority, визначається в маніфесті • Інші компоненти працюють з ними через ContentResolver • Приклад стандартного провайдера: контакти
  • 31.
    Компоненти • Активності (Activities) • Сервіси (Services) • Контент-провайдери (Content Providers) • Отримувачі широкомовних повідомлень (Broadcast Receivers)
  • 32.
    Broadcast Receiver • Зміначасового поясу • Завантаження системи • Вимкнення телефону Для того, щоб зробити розумні сервіси: • Зміна стану заряду батареї • Підключення «зарядки»
  • 33.
    І ще однадуже важлива річ…
  • 34.
    Головний потік таасинхронні задачі • Виклики методів життєвого циклу завжди виконуються в основному потоці (слідкуйте за ANR!) • AsyncTask – винесення операції в окремий потік • AsyncQueryHandler – запити до контент провайдера в окремому потоці • Все це працює через Handler
  • 35.
    Користуйтеся StrictMode! StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build() ); StrictMode.setVmPolicy( new StrictMode.VmPolicy.Builder() .detectAll() .penaltyLog() .build() );
  • 36.
    Ваша черга! Роман Мазур КерівникAndroid/Java відділу Stanfy rmazur@stanfy.com.ua Skype: roman.mazur.f