mDevCamp - Android a práce na pozadí

1,472 views
1,425 views

Published on

Android API pro práci na pozadí je bohaté, nabízí věci jako AsyncTask, IntentService, Handler. Oficiální i neoficiální dokumentace je ale na vysvětlování jejich používání trochu skoupá. V přednášce identifikujeme nejpoužívanější use-cases práce na pozadí a ukážeme si několik možností, jak je správně řešit. Začneme skrytými záludnostmi použití AsyncTasku, přejdeme na synchronizaci dat z a na server a na konci se zastavíme u Service. Přednáška je určena všem Android vývojářům.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,472
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
28
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 0.5min\n
  • 0.5\n
  • 0.5\n
  • 0.5\n
  • od geeku pro geeky\n\n1min\n
  • od geeku pro geeky\n\n1min\n
  • od geeku pro geeky\n\n1min\n
  • od geeku pro geeky\n\n1min\n
  • od geeku pro geeky\n\n1min\n
  • od geeku pro geeky\n\n1min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 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
  • 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
  • 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
  • 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
  • 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
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 2min\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • 3min\n\n19:30\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • co se stane, kdyz se telefon otoci?\n\n3min\n\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • i worker fragment musi pustit nejaky thread => async task\nnastavit cilovy fragment pres setTargetFragment()\n\n3min\n25:30\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • nevyhody = neustale parsovani jsonu\n
  • 2 min\n
  • 2 min\n
  • 2 min\n
  • 2 min\n
  • 2 min\n
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 1.5 min\n\n=32.5\n
  • 1.5 min\n\n=32.5\n
  • 1.5 min\n\n=32.5\n
  • 1.5 min\n\n=32.5\n
  • 1.5 min\n\n=32.5\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • WeakReference na volajici Context\nzavrit Cursor, pokud neni Context\n\n3 min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • do volani content provideru dat i volani service\n\n3 min\n38min\n
  • 1 min\n
  • 1 min\n
  • 1 min\n
  • 1 min\n
  • 1 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • co se stane, kdyz se telefon otoci?\n2min\n41 min\n
  • service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  • service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  • service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  • service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  • service je jenom komponenta ktera drzi proces v pameti\nmuzu mit nekolik ui\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  • do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  • do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  • do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  • do 10s, nespoustet nic dlouheho - take bezi v main threadu - radsi spustit IntentService\n\nna zaver kousek kodu, abyste neodesli nepoznamenani\n
  • a v callbacku testovat stav ui - finished, pripojeny fragment\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • mDevCamp - Android a práce na pozadí

    1. 1. Android a práce na pozadí Ondra Zahradník mDevCamp - 26.5.2012
    2. 2. Agenda
    3. 3. Agenda•Motivace
    4. 4. Agenda•Motivace•Use-cases
    5. 5. Agenda•Motivace•Use-cases•Diskuze
    6. 6. Motivace - bohaté API
    7. 7. Motivace - bohaté API•Spousta nástrojů
    8. 8. Motivace - bohaté API•Spousta nástrojů •Handler, AsyncTask, Service,
    9. 9. Motivace - bohaté API•Spousta nástrojů •Handler, AsyncTask, Service, •AsyncQueryLoader, Loader,
    10. 10. Motivace - bohaté API•Spousta nástrojů •Handler, AsyncTask, Service, •AsyncQueryLoader, Loader, •Worker Fragment,...
    11. 11. Motivace - bohaté API•Spousta nástrojů •Handler, AsyncTask, Service, •AsyncQueryLoader, Loader, •Worker Fragment,...•Málo dokumentace s best-practices
    12. 12. Motivace - bohaté API•Spousta nástrojů •Handler, AsyncTask, Service, •AsyncQueryLoader, Loader, •Worker Fragment,...•Málo dokumentace s best-practices•Spousta nekvalitních apps
    13. 13. Motivace -rychlé appky
    14. 14. Motivace -rychlé appky•Nechceme čekat, když čekáme
    15. 15. Motivace -rychlé appky•Nechceme čekat, když čekáme•Chceme rychlé appky
    16. 16. Motivace -rychlé appky•Nechceme čekat, když čekáme•Chceme rychlé appky 1.síťovat, když se nikdo nedívá
    17. 17. 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ě
    18. 18. 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
    19. 19. Příklad - Corkbin pro iOS a Android
    20. 20. Příklad - Corkbin pro iOS a Android
    21. 21. Příklad - Corkbin pro iOS a Android
    22. 22. Příklad - Corkbin pro iOS a Android
    23. 23. Příklad - Corkbin pro iOS a Android
    24. 24. Příklad - Corkbin pro iOS a Android
    25. 25. Příklad - Corkbin pro iOS a Android
    26. 26. Příklad - Corkbin pro iOS a Android
    27. 27. Příklad - Corkbin pro iOS a Android
    28. 28. Příklad - Corkbin pro iOS a Android
    29. 29. Příklad - Corkbin pro iOS a Android
    30. 30. Omezený programovací model
    31. 31. Omezený programovací model•Slabý procesor
    32. 32. Omezený programovací model•Slabý procesor•Opravdový multi-tasking
    33. 33. Omezený programovací model•Slabý procesor•Opravdový multi-tasking•“Application not responding” aka. ANR
    34. 34. Omezený programovací model•Slabý procesor•Opravdový multi-tasking•“Application not responding” aka. ANR•Aktualizace UI pouze v ui threadu
    35. 35. Omezený programovací model•Slabý procesor•Opravdový multi-tasking•“Application not responding” aka. ANR•Aktualizace UI pouze v ui threadu•UI žije jenom chvíli
    36. 36. Use-cases
    37. 37. Use-cases• Znovuobjevení AsyncTasku
    38. 38. Use-cases• Znovuobjevení AsyncTasku• Stažení dat ze serveru
    39. 39. Use-cases• Znovuobjevení AsyncTasku• Stažení dat ze serveru• Aktualizace modelu
    40. 40. Use-cases• Znovuobjevení AsyncTasku• Stažení dat ze serveru• Aktualizace modelu• Progress dialog
    41. 41. Use-cases• Znovuobjevení AsyncTasku• Stažení dat ze serveru• Aktualizace modelu• Progress dialog• Dlouhotrvající úlohy
    42. 42. Nástroje
    43. 43. Nástroje•AsyncTask – jednorázové operace
    44. 44. Nástroje•AsyncTask – jednorázové operace•Loader – načítání dat pro view
    45. 45. Nástroje•AsyncTask – jednorázové operace•Loader – načítání dat pro view•AsyncQueryHandler – operace delete, update, create
    46. 46. 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
    47. 47. 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
    48. 48. 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
    49. 49. 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í
    50. 50. Znovuobjevení AsyncTasku
    51. 51. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI
    52. 52. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv
    53. 53. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv•AsyncTask jako anonymní třída - drží Context
    54. 54. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv•AsyncTask jako anonymní třída - drží Context
    55. 55. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv•AsyncTask jako anonymní třída - drží Context
    56. 56. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv•AsyncTask jako anonymní třída - drží Context
    57. 57. Znovuobjevení AsyncTasku•UI -> práce na pozadí -> aktualizace UI•UI může skončit kdykoliv•AsyncTask jako anonymní třída - drží Context
    58. 58. Znovuobjevení AsyncTasku
    59. 59. Znovuobjevení AsyncTasku
    60. 60. Znovuobjevení AsyncTasku•Lepší je worker fragment - setRetainInstance()
    61. 61. Stažení dat ze serveru
    62. 62. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”
    63. 63. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”•Cachovaná, aktualizovaná read-only data
    64. 64. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”•Cachovaná, aktualizovaná read-only data•Cachovat HTTP response
    65. 65. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”•Cachovaná, aktualizovaná read-only data•Cachovat HTTP response•AsyncLoader
    66. 66. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”•Cachovaná, aktualizovaná read-only data•Cachovat HTTP response•AsyncLoader•URLConnection
    67. 67. Stažení dat ze serveru•“Ukaž něco a pak aktualizuj”•Cachovaná, aktualizovaná read-only data•Cachovat HTTP response•AsyncLoader•URLConnection•HttpResponseCache - od v13
    68. 68. 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
    69. 69. Stažení dat ze serveru
    70. 70. Stažení dat ze serveru Fragment zobrazí data AsyncLoader
    71. 71. Stažení dat ze serveru Fragment zobrazí data AsyncLoader poskytuje data Disková cache
    72. 72. Stažení dat ze serveru vyvolá refresh Fragment zobrazí data AsyncLoader AsyncLoader poskytuje data Disková cache
    73. 73. Stažení dat ze serveru vyvolá refresh Fragment zobrazí data zobrazí data AsyncLoader AsyncLoader poskytuje data Disková cache
    74. 74. Stažení dat ze serveru vyvolá refresh Fragment zobrazí data zobrazí data AsyncLoader AsyncLoader poskytuje data aktualizuje Disková cache cache
    75. 75. Stažení dat ze serveru 2
    76. 76. Stažení dat ze serveru 2•Model v DB
    77. 77. Stažení dat ze serveru 2•Model v DB•Sync přes IntentService
    78. 78. Stažení dat ze serveru 2•Model v DB•Sync přes IntentService•Přístup k modelu přes ContentProvider
    79. 79. Stažení dat ze serveru 2•Model v DB•Sync přes IntentService•Přístup k modelu přes ContentProvider •REST-like api
    80. 80. 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
    81. 81. 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
    82. 82. Stažení dat ze serveru 2 Fragment načítání dat CursorLoader
    83. 83. Stažení dat ze serveru 2 Fragment načítání dat CursorLoader poskytuje data ContentProvider
    84. 84. Stažení dat ze serveru 2 Fragment načítání dat CursorLoader poskytuje data čte data ContentProvider DB
    85. 85. Stažení dat ze serveru 2 vyvolá refresh Fragment načítání dat CursorLoader IntentService poskytuje data čte data ContentProvider DB
    86. 86. Stažení dat ze serveru 2 vyvolá refresh Fragment načítání dat CursorLoader IntentService poskytuje aktualizuje data data čte data ContentProvider DB
    87. 87. 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
    88. 88. Aktualizace modelu
    89. 89. Aktualizace modelu•Neblokovat UI, model v DB
    90. 90. Aktualizace modelu•Neblokovat UI, model v DB•V modelu stav synchronizace se serverem
    91. 91. Aktualizace modelu•Neblokovat UI, model v DB•V modelu stav synchronizace se serverem •flagy Status a Transaction/poslední změna
    92. 92. 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
    93. 93. 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
    94. 94. 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
    95. 95. 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
    96. 96. Aktualizace modelu
    97. 97. Aktualizace modelu Fragmentnačítání dat poskytuje data CursorLoader ContentProvider
    98. 98. Aktualizace modelu update, create, delete AsyncQueryHandle Fragment rnačítání dat poskytuje data CursorLoader ContentProvider
    99. 99. Aktualizace modelu update, create, delete AsyncQueryHandle Fragment r volánačítání dat provider poskytuje data CursorLoader ContentProvider
    100. 100. Aktualizace modelu update, create, delete AsyncQueryHandle Fragment r volánačítání dat provider poskytuje data CursorLoader ContentProvider mění data DB
    101. 101. Aktualizace modelu update, create, delete AsyncQueryHandle Fragment r volánačítání dat provider poskytuje data CursorLoader notifikuje ContentProvider akci mění data DB
    102. 102. 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
    103. 103. 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
    104. 104. 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
    105. 105. Progress dialog
    106. 106. Progress dialog
    107. 107. Progress dialogBlokuje UI dokud neskončídůležitá operace
    108. 108. Progress dialogBlokuje UI dokud neskončídůležitá operacePřežije změny konfigurace
    109. 109. Progress dialogBlokuje UI dokud neskončídůležitá operacePřežije změny konfiguraceLze ho stornovat
    110. 110. Progress dialogBlokuje UI dokud neskončídůležitá operacePřežije změny konfiguraceLze ho stornovatRealizace přesDialogFragment aAsyncTask
    111. 111. Progress dialog
    112. 112. Progress dialog
    113. 113. Progress dialog
    114. 114. Progress dialog
    115. 115. Progress dialog
    116. 116. Progress dialog
    117. 117. Progress dialog
    118. 118. Dlouhotrvající úlohy
    119. 119. Dlouhotrvající úlohy
    120. 120. Dlouhotrvající úlohyService s worker threadem
    121. 121. Dlouhotrvající úlohyService s worker threademUI pro ovládání bindujeservice
    122. 122. Dlouhotrvající úlohyService s worker threademUI pro ovládání bindujeserviceUI je typicky několik
    123. 123. Dlouhotrvající úlohyService s worker threademUI pro ovládání bindujeserviceUI je typicky několikNotifikace přes callback amodel
    124. 124. Dlouhotrvající úlohy
    125. 125. Dlouhotrvající úlohy
    126. 126. Dlouhotrvající úlohy
    127. 127. Dlouhotrvající úlohy
    128. 128. Dlouhotrvající úlohy
    129. 129. Poslední tipy a triky
    130. 130. Poslední tipy a triky•BroadcastReceiver musí být rychlý
    131. 131. Poslední tipy a triky•BroadcastReceiver musí být rychlý•AsyncTask od 3.0 není paralelní by default
    132. 132. 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
    133. 133. 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
    134. 134. 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 were 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);
    135. 135. Rekapitulace•Chceme rychlé appky•Aktivity a fragmenty - hloupé/krátkodobé UI•Pamatovat na implicitní reference•V callbacku do UI kontrolovat jeho stav
    136. 136. Otázky
    137. 137. Otázky @ondraz
    138. 138. Otázky Feedback @ondraz mdc.conferoo.com

    ×