SlideShare una empresa de Scribd logo
1 de 139
Android a práce na
     pozadí
     Ondra Zahradník
   mDevCamp - 26.5.2012
Agenda
Agenda

•Motivace
Agenda

•Motivace
•Use-cases
Agenda

•Motivace
•Use-cases
•Diskuze
Motivace - bohaté API
Motivace - bohaté API

•Spousta nástrojů
Motivace - bohaté API

•Spousta nástrojů
 •Handler, AsyncTask, Service,
Motivace - bohaté API

•Spousta nástrojů
 •Handler, AsyncTask, Service,
 •AsyncQueryLoader, Loader,
Motivace - bohaté API

•Spousta nástrojů
 •Handler, AsyncTask, Service,
 •AsyncQueryLoader, Loader,
 •Worker Fragment,...
Motivace - bohaté API

•Spousta nástrojů
 •Handler, AsyncTask, Service,
 •AsyncQueryLoader, Loader,
 •Worker Fragment,...
•Málo dokumentace s best-practices
Motivace - bohaté API

•Spousta nástrojů
 •Handler, AsyncTask, Service,
 •AsyncQueryLoader, Loader,
 •Worker Fragment,...
•Málo dokumentace s best-practices
•Spousta nekvalitních apps
Motivace -rychlé appky
Motivace -rychlé appky

•Nechceme čekat, když čekáme
Motivace -rychlé appky

•Nechceme čekat, když čekáme
•Chceme rychlé appky
Motivace -rychlé appky

•Nechceme čekat, když čekáme
•Chceme rychlé appky
 1.síťovat, když se nikdo nedívá
Motivace -rychlé appky

•Nechceme čekat, když čekáme
•Chceme rychlé appky
 1.síťovat, když se nikdo nedívá
 2.provádět akce okamžitě
Motivace -rychlé appky

•Nechceme čekat, když čekáme
•Chceme rychlé appky
 1.síťovat, když se nikdo nedívá
 2.provádět akce okamžitě
 3.prioritizovat tasky
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Příklad - Corkbin pro iOS a Android
Omezený programovací model
Omezený programovací model

•Slabý procesor
Omezený programovací model

•Slabý procesor
•Opravdový multi-tasking
Omezený programovací model

•Slabý procesor
•Opravdový multi-tasking
•“Application not responding” aka. ANR
Omezený programovací model

•Slabý procesor
•Opravdový multi-tasking
•“Application not responding” aka. ANR
•Aktualizace UI pouze v ui threadu
Omezený programovací model

•Slabý procesor
•Opravdový multi-tasking
•“Application not responding” aka. ANR
•Aktualizace UI pouze v ui threadu
•UI žije jenom chvíli
Use-cases
Use-cases

• Znovuobjevení AsyncTasku
Use-cases

• Znovuobjevení AsyncTasku
• Stažení dat ze serveru
Use-cases

• Znovuobjevení AsyncTasku
• Stažení dat ze serveru
• Aktualizace modelu
Use-cases

• Znovuobjevení AsyncTasku
• Stažení dat ze serveru
• Aktualizace modelu
• Progress dialog
Use-cases

• Znovuobjevení AsyncTasku
• Stažení dat ze serveru
• Aktualizace modelu
• Progress dialog
• Dlouhotrvající úlohy
Nástroje
Nástroje

•AsyncTask – jednorázové operace
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
•AsyncQueryHandler – operace delete,
  update, create
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
•AsyncQueryHandler – operace delete,
  update, create

•IntentService – jednorázově na pozadí bez
  UI
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
•AsyncQueryHandler – operace delete,
  update, create

•IntentService – jednorázově na pozadí bez
  UI

•Service – na pozadí s UI
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
•AsyncQueryHandler – operace delete,
  update, create

•IntentService – jednorázově na pozadí bez
  UI

•Service – na pozadí s UI
•Handler, HandlerThread – fronta úloh
Nástroje

•AsyncTask – jednorázové operace
•Loader – načítání dat pro view
•AsyncQueryHandler – operace delete,
  update, create

•IntentService – jednorázově na pozadí bez
  UI

•Service – na pozadí s UI
•Handler, HandlerThread – fronta úloh
•Thread, ThreadPoolExecutor – komplexní
Znovuobjevení AsyncTasku
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
•AsyncTask jako anonymní třída - drží
  Context
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
•AsyncTask jako anonymní třída - drží
  Context
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
•AsyncTask jako anonymní třída - drží
  Context
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
•AsyncTask jako anonymní třída - drží
  Context
Znovuobjevení AsyncTasku

•UI -> práce na pozadí -> aktualizace UI
•UI může skončit kdykoliv
•AsyncTask jako anonymní třída - drží
  Context
Znovuobjevení AsyncTasku
Znovuobjevení AsyncTasku
Znovuobjevení AsyncTasku




•Lepší je worker fragment -
  setRetainInstance()
Stažení dat ze serveru
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
•Cachovat HTTP response
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
•Cachovat HTTP response
•AsyncLoader
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
•Cachovat HTTP response
•AsyncLoader
•URLConnection
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
•Cachovat HTTP response
•AsyncLoader
•URLConnection
•HttpResponseCache - od v13
Stažení dat ze serveru

•“Ukaž něco a pak aktualizuj”
•Cachovaná, aktualizovaná read-only data
•Cachovat HTTP response
•AsyncLoader
•URLConnection
•HttpResponseCache - od v13
•DiskLRUCache
Stažení dat ze serveru
Stažení dat ze serveru

       Fragment

   zobrazí
    data


     AsyncLoader
Stažení dat ze serveru

       Fragment

   zobrazí
    data


     AsyncLoader

 poskytuje
   data


    Disková cache
Stažení dat ze serveru
                          vyvolá
                         refresh
       Fragment

   zobrazí
    data


     AsyncLoader              AsyncLoader

 poskytuje
   data


    Disková cache
Stažení dat ze serveru
                          vyvolá
                         refresh
       Fragment          zobrazí
                           data
   zobrazí
    data


     AsyncLoader              AsyncLoader

 poskytuje
   data


    Disková cache
Stažení dat ze serveru
                           vyvolá
                          refresh
       Fragment           zobrazí
                            data
   zobrazí
    data


     AsyncLoader                   AsyncLoader

 poskytuje
   data
                     aktualizuje
    Disková cache      cache
Stažení dat ze serveru 2
Stažení dat ze serveru 2

•Model v DB
Stažení dat ze serveru 2

•Model v DB
•Sync přes IntentService
Stažení dat ze serveru 2

•Model v DB
•Sync přes IntentService
•Přístup k modelu přes ContentProvider
Stažení dat ze serveru 2

•Model v DB
•Sync přes IntentService
•Přístup k modelu přes ContentProvider
 •REST-like api
Stažení dat ze serveru 2

•Model v DB
•Sync přes IntentService
•Přístup k modelu přes ContentProvider
 •REST-like api
•UI přes CursorLoader
Stažení dat ze serveru 2

•Model v DB
•Sync přes IntentService
•Přístup k modelu přes ContentProvider
 •REST-like api
•UI přes CursorLoader
•Alternativně: SyncAdapter
Stažení dat ze serveru 2

        Fragment

  načítání dat


      CursorLoader
Stažení dat ze serveru 2

        Fragment

  načítání dat


      CursorLoader

  poskytuje
    data


    ContentProvider
Stažení dat ze serveru 2

        Fragment

  načítání dat


      CursorLoader

  poskytuje
    data

                      čte data
    ContentProvider              DB
Stažení dat ze serveru 2

                             vyvolá refresh
        Fragment

  načítání dat


      CursorLoader                     IntentService

  poskytuje
    data

                      čte data
    ContentProvider                           DB
Stažení dat ze serveru 2

                             vyvolá refresh
        Fragment

  načítání dat


      CursorLoader                     IntentService

  poskytuje                                        aktualizuje
    data                                              data

                      čte data
    ContentProvider                           DB
Stažení dat ze serveru 2

                               vyvolá refresh
        Fragment

  načítání dat

                      notifikuje uri
      CursorLoader                       IntentService

  poskytuje                                          aktualizuje
    data                                                data

                        čte data
    ContentProvider                             DB
Aktualizace modelu
Aktualizace modelu

•Neblokovat UI, model v DB
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
 •flagy Status a Transaction/poslední změna
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
 •flagy Status a Transaction/poslední změna
 •propagace chyb a stavu do UI
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
 •flagy Status a Transaction/poslední změna
 •propagace chyb a stavu do UI
•Lokální update přes AsyncQueryHandler
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
 •flagy Status a Transaction/poslední změna
 •propagace chyb a stavu do UI
•Lokální update přes AsyncQueryHandler
 •použít WeakReference v callbacku
Aktualizace modelu

•Neblokovat UI, model v DB
•V modelu stav synchronizace se serverem
 •flagy Status a Transaction/poslední změna
 •propagace chyb a stavu do UI
•Lokální update přes AsyncQueryHandler
 •použít WeakReference v callbacku
•Synchronizace přes IntentService
Aktualizace modelu
Aktualizace modelu



      Fragment

načítání dat
                   poskytuje
                     data
    CursorLoader               ContentProvider
Aktualizace modelu


                   update, create,
                      delete         AsyncQueryHandle
      Fragment                              r

načítání dat
                     poskytuje
                       data
    CursorLoader                     ContentProvider
Aktualizace modelu


                   update, create,
                      delete         AsyncQueryHandle
      Fragment                              r

                                                volá
načítání dat
                                              provider
                     poskytuje
                       data
    CursorLoader                     ContentProvider
Aktualizace modelu


                   update, create,
                      delete         AsyncQueryHandle
      Fragment                              r

                                                volá
načítání dat
                                              provider
                     poskytuje
                       data
    CursorLoader                     ContentProvider

                                                   mění data


                                                DB
Aktualizace modelu


                   update, create,
                      delete         AsyncQueryHandle
      Fragment                              r

                                                volá
načítání dat
                                              provider
                     poskytuje
                       data
    CursorLoader     notifikuje       ContentProvider
                       akci

                                                   mění data


                                                DB
Aktualizace modelu


                      update, create,
                         delete          AsyncQueryHandle
      Fragment                                  r

                                                    volá
načítání dat
                                                  provider
                        poskytuje
                          data
    CursorLoader        notifikuje        ContentProvider
                          akci
                             volá sync
                                                       mění data


               IntentService                        DB
Aktualizace modelu


                      update, create,
                         delete             AsyncQueryHandle
      Fragment                                     r

                                                        volá
načítání dat
                                                      provider
                        poskytuje
                          data
    CursorLoader        notifikuje           ContentProvider
                          akci
                             volá sync
                                                           mění data

                                        aktualizuje
               IntentService               data         DB
Aktualizace modelu


                      update, create,
                         delete             AsyncQueryHandle
      Fragment                                     r

                                                        volá
načítání dat
                                                      provider
                        poskytuje
                          data
    CursorLoader        notifikuje           ContentProvider
                          akci
                             volá sync
   notifikuj                                                mění data
      e
                                        aktualizuje
               IntentService               data         DB
Progress dialog
Progress dialog
Progress dialog

Blokuje UI dokud neskončí
důležitá operace
Progress dialog

Blokuje UI dokud neskončí
důležitá operace
Přežije změny konfigurace
Progress dialog

Blokuje UI dokud neskončí
důležitá operace
Přežije změny konfigurace
Lze ho stornovat
Progress dialog

Blokuje UI dokud neskončí
důležitá operace
Přežije změny konfigurace
Lze ho stornovat
Realizace přes
DialogFragment a
AsyncTask
Progress dialog
Progress dialog
Progress dialog
Progress dialog
Progress dialog
Progress dialog
Progress dialog
Dlouhotrvající úlohy
Dlouhotrvající úlohy
Dlouhotrvající úlohy

Service s worker threadem
Dlouhotrvající úlohy

Service s worker threadem
UI pro ovládání binduje
service
Dlouhotrvající úlohy

Service s worker threadem
UI pro ovládání binduje
service
UI je typicky několik
Dlouhotrvající úlohy

Service s worker threadem
UI pro ovládání binduje
service
UI je typicky několik
Notifikace přes callback a
model
Dlouhotrvající úlohy
Dlouhotrvající úlohy
Dlouhotrvající úlohy
Dlouhotrvající úlohy
Dlouhotrvající úlohy
Poslední tipy a triky
Poslední tipy a triky

•BroadcastReceiver musí být rychlý
Poslední tipy a triky

•BroadcastReceiver musí být rychlý
•AsyncTask od 3.0 není paralelní by default
Poslední tipy a triky

•BroadcastReceiver musí být rychlý
•AsyncTask od 3.0 není paralelní by default
•Neprovádět síťování v offline ale plánovat
Poslední tipy a triky

•BroadcastReceiver musí být rychlý
•AsyncTask od 3.0 není paralelní by default
•Neprovádět síťování v offline ale plánovat
 •ConnectivityChangedReceiver
Poslední tipy a triky

•BroadcastReceiver musí být rychlý
•AsyncTask od 3.0 není paralelní by default
•Neprovádět síťování v offline ale plánovat
 •ConnectivityChangedReceiver
          // If we're not connected, enable the connectivity receiver
          // to call us back once we have a connection
          PackageManager pm = getPackageManager();

          ComponentName connectivityReceiver = new ComponentName(
          	   this,
              ConnectivityChangedReceiver.class);

          pm.setComponentEnabledSetting(
          	   connectivityReceiver,
          	   PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
          	   PackageManager.DONT_KILL_APP);
Rekapitulace

•Chceme rychlé appky
•Aktivity a fragmenty - hloupé/krátkodobé
  UI

•Pamatovat na implicitní reference
•V callbacku do UI kontrolovat jeho stav
Otázky
Otázky
 @ondraz
Otázky     Feedback
 @ondraz




           mdc.conferoo.com

Más contenido relacionado

Destacado

Hoja de Vida de José Sánchez Salazar
Hoja de Vida de José Sánchez SalazarHoja de Vida de José Sánchez Salazar
Hoja de Vida de José Sánchez Salazar
jsanchezs
 
Bee bot presentation 02-2013
Bee bot presentation 02-2013Bee bot presentation 02-2013
Bee bot presentation 02-2013
Sandra Costa
 
Trabajo con textos en power point
Trabajo con textos en power pointTrabajo con textos en power point
Trabajo con textos en power point
iraidacota18
 

Destacado (19)

Simply Colours
Simply ColoursSimply Colours
Simply Colours
 
Improving Productivity with Automated Time and Attendance
Improving Productivity with Automated Time and AttendanceImproving Productivity with Automated Time and Attendance
Improving Productivity with Automated Time and Attendance
 
Reglamento trivia
Reglamento triviaReglamento trivia
Reglamento trivia
 
Hoja de Vida de José Sánchez Salazar
Hoja de Vida de José Sánchez SalazarHoja de Vida de José Sánchez Salazar
Hoja de Vida de José Sánchez Salazar
 
Algunos de los grandes desafios de la educacion a comienzos del siglo xxi
Algunos de los grandes desafios de la educacion a comienzos del siglo xxiAlgunos de los grandes desafios de la educacion a comienzos del siglo xxi
Algunos de los grandes desafios de la educacion a comienzos del siglo xxi
 
D A T A C O N T
D A T A C O N TD A T A C O N T
D A T A C O N T
 
Portfolio - Other
Portfolio - OtherPortfolio - Other
Portfolio - Other
 
2015 Chesapeake Bayhawks Yearbook
2015 Chesapeake Bayhawks Yearbook2015 Chesapeake Bayhawks Yearbook
2015 Chesapeake Bayhawks Yearbook
 
Node.js Authentication & Data Security
Node.js Authentication & Data SecurityNode.js Authentication & Data Security
Node.js Authentication & Data Security
 
The 5 human factors of enterprise collaboration
The 5 human factors of enterprise collaborationThe 5 human factors of enterprise collaboration
The 5 human factors of enterprise collaboration
 
Nicknamfx Graficos 2d
Nicknamfx Graficos 2dNicknamfx Graficos 2d
Nicknamfx Graficos 2d
 
Vitaminas y minerales
Vitaminas y mineralesVitaminas y minerales
Vitaminas y minerales
 
Modulo 1 (2014)
Modulo 1 (2014)Modulo 1 (2014)
Modulo 1 (2014)
 
Bee bot presentation 02-2013
Bee bot presentation 02-2013Bee bot presentation 02-2013
Bee bot presentation 02-2013
 
What If...Hydraulic Fracturing Was Banned?
What If...Hydraulic Fracturing Was Banned?What If...Hydraulic Fracturing Was Banned?
What If...Hydraulic Fracturing Was Banned?
 
La Inquisición
La Inquisición La Inquisición
La Inquisición
 
Cosmos digital Presentation Deck - January 2014
Cosmos digital Presentation Deck - January 2014Cosmos digital Presentation Deck - January 2014
Cosmos digital Presentation Deck - January 2014
 
Informe de auditoria - Tribunal de Cuentas
Informe de auditoria - Tribunal de CuentasInforme de auditoria - Tribunal de Cuentas
Informe de auditoria - Tribunal de Cuentas
 
Trabajo con textos en power point
Trabajo con textos en power pointTrabajo con textos en power point
Trabajo con textos en power point
 

Similar a mDevCamp - Android a práce na pozadí

Martin Bydžovský : Škálování kontejnerů na Mesosu
Martin Bydžovský : Škálování kontejnerů na MesosuMartin Bydžovský : Škálování kontejnerů na Mesosu
Martin Bydžovský : Škálování kontejnerů na Mesosu
Develcz
 
Migrace na windows azure
Migrace na windows azureMigrace na windows azure
Migrace na windows azure
KenticoDominikP
 
Optimalizace výkonu webových aplikací
Optimalizace výkonu webových aplikacíOptimalizace výkonu webových aplikací
Optimalizace výkonu webových aplikací
Michal Špaček
 
Hostujeme v cloudu
Hostujeme v clouduHostujeme v cloudu
Hostujeme v cloudu
twobits
 

Similar a mDevCamp - Android a práce na pozadí (20)

Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
vSphere automation workshop python
vSphere automation workshop pythonvSphere automation workshop python
vSphere automation workshop python
 
Symfony vs Nette vs Phalcon
Symfony vs Nette vs PhalconSymfony vs Nette vs Phalcon
Symfony vs Nette vs Phalcon
 
App Engine Kick Start
App Engine Kick StartApp Engine Kick Start
App Engine Kick Start
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
Veeam v10 jak na to
Veeam v10 jak na toVeeam v10 jak na to
Veeam v10 jak na to
 
Lotus Notes 7
Lotus Notes 7Lotus Notes 7
Lotus Notes 7
 
Martin Bydžovský : Škálování kontejnerů na Mesosu
Martin Bydžovský : Škálování kontejnerů na MesosuMartin Bydžovský : Škálování kontejnerů na Mesosu
Martin Bydžovský : Škálování kontejnerů na Mesosu
 
Migrace na windows azure
Migrace na windows azureMigrace na windows azure
Migrace na windows azure
 
Optimalizace výkonu webových aplikací
Optimalizace výkonu webových aplikacíOptimalizace výkonu webových aplikací
Optimalizace výkonu webových aplikací
 
MVC na iOS - For-Mobile 2/2013
MVC na iOS - For-Mobile 2/2013MVC na iOS - For-Mobile 2/2013
MVC na iOS - For-Mobile 2/2013
 
Revoluce v cloudu: první autonomně řízená databáze na světě
Revoluce v cloudu: první autonomně řízená databáze na světěRevoluce v cloudu: první autonomně řízená databáze na světě
Revoluce v cloudu: první autonomně řízená databáze na světě
 
Confluence 7 novinky
Confluence 7 novinkyConfluence 7 novinky
Confluence 7 novinky
 
Database Cloud Backup DEMO
Database Cloud Backup DEMODatabase Cloud Backup DEMO
Database Cloud Backup DEMO
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise System
 
Hostujeme v cloudu
Hostujeme v clouduHostujeme v cloudu
Hostujeme v cloudu
 
Database Cloud Backup DEMO
Database Cloud Backup DEMODatabase Cloud Backup DEMO
Database Cloud Backup DEMO
 
Zálohování Oracle databáze do cloudu prakticky
Zálohování Oracle databáze do cloudu praktickyZálohování Oracle databáze do cloudu prakticky
Zálohování Oracle databáze do cloudu prakticky
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 

mDevCamp - Android a práce na pozadí

Notas del editor

  1. 0.5min\n
  2. 0.5\n
  3. 0.5\n
  4. 0.5\n
  5. od geeku pro geeky\n\n1min\n
  6. od geeku pro geeky\n\n1min\n
  7. od geeku pro geeky\n\n1min\n
  8. od geeku pro geeky\n\n1min\n
  9. od geeku pro geeky\n\n1min\n
  10. od geeku pro geeky\n\n1min\n
  11. 2min\n
  12. 2min\n
  13. 2min\n
  14. 2min\n
  15. 2min\n
  16. 2min\n
  17. 2min\n
  18. 2min\n
  19. 2min\n
  20. 2min\n
  21. 2min\n
  22. 2min\n
  23. 2min\n
  24. 2min\n
  25. 2min\n
  26. 2min\n
  27. 2min\n
  28. 2min\n
  29. 2min\n
  30. 2min\n
  31. 2min\n
  32. 2min\n
  33. 2min\n
  34. 2min\n
  35. 2min\n
  36. 2min\n
  37. 2min\n
  38. 2min\n
  39. 2min\n
  40. 2min\n
  41. 2min\n
  42. 2min\n
  43. 2min\n
  44. 2min\n
  45. 2min\n
  46. 2min\n
  47. 2min\n
  48. 2min\n
  49. 2min\n
  50. je zaklad naucit se premyslet o UI jako veci, ktera je jenom chvilkova\nrozdelit si aplikaci na ui, boilerplate a model\n\n2min\n\n=13:30\n
  51. je zaklad naucit se premyslet o UI jako veci, ktera je jenom chvilkova\nrozdelit si aplikaci na ui, boilerplate a model\n\n2min\n\n=13:30\n
  52. je zaklad naucit se premyslet o UI jako veci, ktera je jenom chvilkova\nrozdelit si aplikaci na ui, boilerplate a model\n\n2min\n\n=13:30\n
  53. je zaklad naucit se premyslet o UI jako veci, ktera je jenom chvilkova\nrozdelit si aplikaci na ui, boilerplate a model\n\n2min\n\n=13:30\n
  54. je zaklad naucit se premyslet o UI jako veci, ktera je jenom chvilkova\nrozdelit si aplikaci na ui, boilerplate a model\n\n2min\n\n=13:30\n
  55. 2min\n
  56. 2min\n
  57. 2min\n
  58. 2min\n
  59. 2min\n
  60. 3min\n\n19:30\n
  61. 3min\n\n19:30\n
  62. 3min\n\n19:30\n
  63. 3min\n\n19:30\n
  64. 3min\n\n19:30\n
  65. 3min\n\n19:30\n
  66. 3min\n\n19:30\n
  67. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  68. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  69. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  70. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  71. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  72. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  73. co se stane, kdyz se telefon otoci?\n\n3min\n\n
  74. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  75. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  76. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  77. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  78. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  79. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  80. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  81. i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  82. nevyhody = neustale parsovani jsonu\n
  83. nevyhody = neustale parsovani jsonu\n
  84. nevyhody = neustale parsovani jsonu\n
  85. nevyhody = neustale parsovani jsonu\n
  86. nevyhody = neustale parsovani jsonu\n
  87. nevyhody = neustale parsovani jsonu\n
  88. nevyhody = neustale parsovani jsonu\n
  89. 2 min\n
  90. 2 min\n
  91. 2 min\n
  92. 2 min\n
  93. 2 min\n
  94. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  95. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  96. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  97. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  98. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  99. proc doporucuju contentProvider\n srozumitelne api\n snadne notifikace\n prace s db na jednom miste\n podpora pro background - CursorLoader, AsyncQueryHandler\nCursorLoader se umi sam refreshnout\n\n2min\n
  100. 1.5 min\n\n=32.5\n
  101. 1.5 min\n\n=32.5\n
  102. 1.5 min\n\n=32.5\n
  103. 1.5 min\n\n=32.5\n
  104. 1.5 min\n\n=32.5\n
  105. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  106. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  107. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  108. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  109. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  110. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  111. WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  112. do volani content provideru dat i volani service\n\n3 min\n38min\n
  113. do volani content provideru dat i volani service\n\n3 min\n38min\n
  114. do volani content provideru dat i volani service\n\n3 min\n38min\n
  115. do volani content provideru dat i volani service\n\n3 min\n38min\n
  116. do volani content provideru dat i volani service\n\n3 min\n38min\n
  117. do volani content provideru dat i volani service\n\n3 min\n38min\n
  118. do volani content provideru dat i volani service\n\n3 min\n38min\n
  119. do volani content provideru dat i volani service\n\n3 min\n38min\n
  120. 1 min\n
  121. 1 min\n
  122. 1 min\n
  123. 1 min\n
  124. 1 min\n
  125. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  126. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  127. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  128. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  129. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  130. co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  131. service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  132. service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  133. service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  134. service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  135. service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  142. do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  143. do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  144. do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  145. do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  146. a v callbacku testovat stav ui - finished, pripojeny fragment\n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n