Розробка під Android нюанси...
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Безпека Система відкрита, але кожен з додатків має свою пісочницю За замовчуванням доступ до ваших ресурсів закритий Можна оголосити права, якими повинен володіти той, хто виконує доступ до ваших ресурсів Права не можна отримати динамічно Розмежування відбувається на рівні ОС, тому не залежить від того, що ви використовуєте: NDK чи SDK
Безпека Додатки підписуються сертифікатами, сертифікати - "самопідписні" Мета - ідентифікувати авторів додатків для введення поняття прав на рівні підписів Кожен додаток має свого користувача, ті хто підписані одним сертифікатом можуть мати спільного користувача
C2DM
C2DM Права: <!-- C2DM --> <uses-permission   android:name = &quot;com.google.android.c2dm.permission.RECEIVE&quot;   /> <!-- Only this application can receive the messages and registration result -->   <permission        android:name = &quot; my.application .permission.C2D_MESSAGE&quot;        android:protectionLevel = &quot;signature&quot;        /> <uses-permission   android:name = &quot; my.application .permission.C2D_MESSAGE&quot;   />   Реєстрація: Intent  registrationIntent  =   new   Intent ( &quot;com.google.android.c2dm.intent.REGISTER&quot; ); registrationIntent . putExtra ( &quot;app&quot; ,   PendingIntent . getBroadcast ( this ,   0 ,   new   Intent (),   0 ));   registrationIntent . putExtra ( &quot;sender&quot; ,  emailOfSender ); startService ( registrationIntent );
C2DM <receiver         android:name = &quot;com.google.android.c2dm.C2DMBroadcastReceiver&quot;       android:permission = &quot;com.google.android.c2dm.permission.SEND&quot;       >        <intent-filter>          <action   android:name = &quot;com.google.android.c2dm.intent.RECEIVE&quot;   />          <category   android:name = &quot;my.application&quot;   />        </intent-filter>        <intent-filter>          <action   android:name = &quot;com.google.android.c2dm.intent.REGISTRATION&quot;   />          <category   android:name = &quot;my.application&quot;   />        </intent-filter> </receiver>  
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Дані користувача Де зберігати?
Дані користувача SharedPreferences (ключ-значення, прості вибірки) SQLite (для пошуку, складних зв'язків) Файли пам'ять телефону зовнішня пам'ять
Дані користувача BackupManager Телефони можуть змінюватися - налаштування мають залишитися
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Ідентифікація Насправді немає унікального ідентифікатору пристрою  TelephonyManager.getDeviceId() - IMEI, MEID, ESN MAC-адреса android.os.Build.SERIAL  - з 2.3 Settings.Secure.ANDROID_ID
Ідентифікація Ідентифікація інсталяції згенерувати та зберегти  UUID.randomUUID().toString() SharedPreferences
Ідентифікація Ідентифікація інсталяції згенерувати та зберегти  UUID.randomUUID().toString() SharedPreferences +
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Основний (GUI) потік Кожен потік має свій екземпляр  Looper , який обробляє чергу повідомлень Події від усіх компонентів передаються в  Looper (наприклад, події в GUI – від View, поява Intent)
Основний (GUI) потік
Основний (GUI) потік Виклики методів життєвих циклів компонентів завжди проходять в основному потокові Будьте швидкими! HandlerThread  - потік з  Looper
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Асинхронний доступ до даних (варіанти) Створення нових потоків new Thread() {   public void run() {     getContentResover().query(...);   } } .start();
Асинхронний доступ до даних (варіанти) AsyncTask new AsyncTask<String, Void, Cursor>() {   protected Cursor doInBackground(String... args) {     getContentResover().query(args[0], ...);   }   protected void onPostExecute(Cursor c) { getListAdapter().changeCursor(c);   } } .execute(&quot;some argument&quot;);
Асинхронний доступ до даних (варіанти) AsyncQueryHandler asyncQueryHandler.startQuery(...); void onQueryComplete(...) {    // GUI thread }
Асинхронний доступ до даних (варіанти) Запуск сервісу context.startService(   new Intent(...)    .putExtra(&quot;resultReceiver&quot;, new  ResultReceiver() {        protected void onReceiveResult(...) {        // process results      }    }) );
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Організація роботи з віддаленим сервером
Організація роботи з віддаленим сервером &quot;Хочу отримати твіти поточного користувача&quot; або &quot;Відправ запит за урлом методом GET з параметром user_id=7 &quot;
Організація роботи з віддаленим сервером &quot;пих-пих...&quot; &quot;о, дані, парсимо...&quot;
Організація роботи з віддаленим сервером &quot;Ось тобі дані, візьми&quot; або &quot;Я дані зберіг, можеш оновитися за таким URI&quot;
Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
Відлагодження та оптимізація Найцікавіше!
Як тестувати? Перевертайте екран на симуляторі! Запускайте на симуляторах з різною густиною пікселів, розміром екрану. Тестуйте на пристроях. повільніші процесори повільніша мобільна мережа місцезнаходження
Відлагодження Logcat if (DEBUG) { Log.v(TAG, &quot;Your message&quot;); } Бряки, Eclipse IDE Емуляція нестачі пам'яті echo &quot;1536,2048,4096,5120,15360,23040&quot; > /sys/module/lowmemorykiller/parameters/minfree
Відлагодження Профайлер методів: DDMS або Debug.startMethodTracing() Відстеження алокації пам'яті (DDMS - Start Allocation Tracking) Аналіз дампів пам'яті
Оптимізація Запис в базу даних: batch operations + транзакції + InsertHelper Views: не створюйте Paint чи Path в onDraw() перевикористовуйте бітмапи + bitmap.recycle() мінімізуйте дерева! + власні ViewGroup Анімації: мінімізуйте активність GC не завантажуйте малюнки, поки скролиться список
Якщо я зараз збираюся завершувати розповідь, зупиніть мене!
Підключіть сурси Android до вашого IDE!
І все тільки починається! Роман Мазур  Керівник Android/Java відділу Stanfy  [email_address]   Skype: roman.mazur.f

More Related Content

PPTX
Олег Байдалка “Android не IPhone”
PDF
Android presentation
PPTX
Presentation On Android OS
PPTX
Android OS Presentation
PPTX
Presentation About Google
PPTX
Ppt for presentation on google inc.
PPTX
Google- company profile
PPT
Android seminar-presentation
Олег Байдалка “Android не IPhone”
Android presentation
Presentation On Android OS
Android OS Presentation
Presentation About Google
Ppt for presentation on google inc.
Google- company profile
Android seminar-presentation

Viewers also liked (8)

PPTX
Smartphones presentation
PPT
Smartphones powerpoint presentation
PDF
All about Google
PPTX
Ppt on World Of Smartphones
PPT
Google Presentation
PPTX
Presentation on-google
PPTX
Android ppt
PPTX
Presentation on Android operating system
Smartphones presentation
Smartphones powerpoint presentation
All about Google
Ppt on World Of Smartphones
Google Presentation
Presentation on-google
Android ppt
Presentation on Android operating system
Ad

Similar to Розробка під Android. Роман Мазур (10)

PPT
Основні поняття Android. Роман Мазур
PDF
Android Platform Architecture
PPTX
Cloud connected mobile apps
PPTX
MPD2011 | Роман Мазур "С чего начать Android разработчику"
PPTX
Android Studio Design App Design App Design App
PPT
Lec16 промiжне програмне забезпечення
PDF
iPhone Objective-C Development (ukr) (2009)
PDF
Курсовая (1).pdf
PDF
"Instant loading: Improving your website speed", Yozhef Hisem
PDF
IT Rally - ISIS
Основні поняття Android. Роман Мазур
Android Platform Architecture
Cloud connected mobile apps
MPD2011 | Роман Мазур "С чего начать Android разработчику"
Android Studio Design App Design App Design App
Lec16 промiжне програмне забезпечення
iPhone Objective-C Development (ukr) (2009)
Курсовая (1).pdf
"Instant loading: Improving your website speed", Yozhef Hisem
IT Rally - ISIS
Ad

More from Stanfy (16)

PDF
Case Study Food&Wine Mobile App
PDF
Продвижение алкогольных брендов с помощью мобильных приложений
PDF
Stanfy. Портфолио
PPTX
Украина и мобаил. Быть или не быть?
PPTX
Предыстория, Тенденции, Платформа и Начало. Павел Башмаков
PPTX
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
PDF
И снова разработка под iOS. Павел Тайкало
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PPT
Prototype like God. Анна Мининкова
PPTX
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
PPTX
Предыстория,тенденции, платформа и начало. Павел Башмаков
PDF
About Stanfy in Forbes Ukraine
PPTX
Mobile News iPhone/iPad/Android - application development platform for web si...
PPTX
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
PDF
Mobile Shopper Insights for 2011
PDF
Ukraine Business Insight
Case Study Food&Wine Mobile App
Продвижение алкогольных брендов с помощью мобильных приложений
Stanfy. Портфолио
Украина и мобаил. Быть или не быть?
Предыстория, Тенденции, Платформа и Начало. Павел Башмаков
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
И снова разработка под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Prototype like God. Анна Мининкова
Один в поле не воин, и чего ищут пользователи. Андрей Гаркавый
Предыстория,тенденции, платформа и начало. Павел Башмаков
About Stanfy in Forbes Ukraine
Mobile News iPhone/iPad/Android - application development platform for web si...
Mobile News - Платформа для создания iPhone/iPad/Android приложений для онлай...
Mobile Shopper Insights for 2011
Ukraine Business Insight

Розробка під Android. Роман Мазур

  • 2. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 3. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 4. Безпека Система відкрита, але кожен з додатків має свою пісочницю За замовчуванням доступ до ваших ресурсів закритий Можна оголосити права, якими повинен володіти той, хто виконує доступ до ваших ресурсів Права не можна отримати динамічно Розмежування відбувається на рівні ОС, тому не залежить від того, що ви використовуєте: NDK чи SDK
  • 5. Безпека Додатки підписуються сертифікатами, сертифікати - &quot;самопідписні&quot; Мета - ідентифікувати авторів додатків для введення поняття прав на рівні підписів Кожен додаток має свого користувача, ті хто підписані одним сертифікатом можуть мати спільного користувача
  • 7. C2DM Права: <!-- C2DM --> <uses-permission   android:name = &quot;com.google.android.c2dm.permission.RECEIVE&quot;   /> <!-- Only this application can receive the messages and registration result -->   <permission       android:name = &quot; my.application .permission.C2D_MESSAGE&quot;       android:protectionLevel = &quot;signature&quot;       /> <uses-permission   android:name = &quot; my.application .permission.C2D_MESSAGE&quot;   />   Реєстрація: Intent registrationIntent = new Intent ( &quot;com.google.android.c2dm.intent.REGISTER&quot; ); registrationIntent . putExtra ( &quot;app&quot; , PendingIntent . getBroadcast ( this , 0 , new Intent (), 0 )); registrationIntent . putExtra ( &quot;sender&quot; , emailOfSender ); startService ( registrationIntent );
  • 8. C2DM <receiver         android:name = &quot;com.google.android.c2dm.C2DMBroadcastReceiver&quot;       android:permission = &quot;com.google.android.c2dm.permission.SEND&quot;       >        <intent-filter>          <action   android:name = &quot;com.google.android.c2dm.intent.RECEIVE&quot;   />          <category   android:name = &quot;my.application&quot;   />        </intent-filter>        <intent-filter>          <action   android:name = &quot;com.google.android.c2dm.intent.REGISTRATION&quot;   />          <category   android:name = &quot;my.application&quot;   />        </intent-filter> </receiver>  
  • 9. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 11. Дані користувача SharedPreferences (ключ-значення, прості вибірки) SQLite (для пошуку, складних зв'язків) Файли пам'ять телефону зовнішня пам'ять
  • 12. Дані користувача BackupManager Телефони можуть змінюватися - налаштування мають залишитися
  • 13. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 14. Ідентифікація Насправді немає унікального ідентифікатору пристрою  TelephonyManager.getDeviceId() - IMEI, MEID, ESN MAC-адреса android.os.Build.SERIAL - з 2.3 Settings.Secure.ANDROID_ID
  • 15. Ідентифікація Ідентифікація інсталяції згенерувати та зберегти  UUID.randomUUID().toString() SharedPreferences
  • 16. Ідентифікація Ідентифікація інсталяції згенерувати та зберегти  UUID.randomUUID().toString() SharedPreferences +
  • 17. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 18. Основний (GUI) потік Кожен потік має свій екземпляр Looper , який обробляє чергу повідомлень Події від усіх компонентів передаються в Looper (наприклад, події в GUI – від View, поява Intent)
  • 20. Основний (GUI) потік Виклики методів життєвих циклів компонентів завжди проходять в основному потокові Будьте швидкими! HandlerThread - потік з Looper
  • 21. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 22. Асинхронний доступ до даних (варіанти) Створення нових потоків new Thread() {   public void run() {     getContentResover().query(...);   } } .start();
  • 23. Асинхронний доступ до даних (варіанти) AsyncTask new AsyncTask<String, Void, Cursor>() {   protected Cursor doInBackground(String... args) {     getContentResover().query(args[0], ...);   }   protected void onPostExecute(Cursor c) { getListAdapter().changeCursor(c);  } } .execute(&quot;some argument&quot;);
  • 24. Асинхронний доступ до даних (варіанти) AsyncQueryHandler asyncQueryHandler.startQuery(...); void onQueryComplete(...) {   // GUI thread }
  • 25. Асинхронний доступ до даних (варіанти) Запуск сервісу context.startService(  new Intent(...)   .putExtra(&quot;resultReceiver&quot;, new  ResultReceiver() {      protected void onReceiveResult(...) {       // process results     }   }) );
  • 26. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 27. Організація роботи з віддаленим сервером
  • 28. Організація роботи з віддаленим сервером &quot;Хочу отримати твіти поточного користувача&quot; або &quot;Відправ запит за урлом методом GET з параметром user_id=7 &quot;
  • 29. Організація роботи з віддаленим сервером &quot;пих-пих...&quot; &quot;о, дані, парсимо...&quot;
  • 30. Організація роботи з віддаленим сервером &quot;Ось тобі дані, візьми&quot; або &quot;Я дані зберіг, можеш оновитися за таким URI&quot;
  • 31. Продовжуємо Безпека Дані користувача Ідентифікація користувача Основний (GUI) потік Асинхронний доступ до даних Організація роботи з віддаленим сервером Відлагодження та оптимізація
  • 33. Як тестувати? Перевертайте екран на симуляторі! Запускайте на симуляторах з різною густиною пікселів, розміром екрану. Тестуйте на пристроях. повільніші процесори повільніша мобільна мережа місцезнаходження
  • 34. Відлагодження Logcat if (DEBUG) { Log.v(TAG, &quot;Your message&quot;); } Бряки, Eclipse IDE Емуляція нестачі пам'яті echo &quot;1536,2048,4096,5120,15360,23040&quot; > /sys/module/lowmemorykiller/parameters/minfree
  • 35. Відлагодження Профайлер методів: DDMS або Debug.startMethodTracing() Відстеження алокації пам'яті (DDMS - Start Allocation Tracking) Аналіз дампів пам'яті
  • 36. Оптимізація Запис в базу даних: batch operations + транзакції + InsertHelper Views: не створюйте Paint чи Path в onDraw() перевикористовуйте бітмапи + bitmap.recycle() мінімізуйте дерева! + власні ViewGroup Анімації: мінімізуйте активність GC не завантажуйте малюнки, поки скролиться список
  • 37. Якщо я зараз збираюся завершувати розповідь, зупиніть мене!
  • 38. Підключіть сурси Android до вашого IDE!
  • 39. І все тільки починається! Роман Мазур Керівник Android/Java відділу Stanfy [email_address] Skype: roman.mazur.f

Editor's Notes