Tak, powinno się to dziać samoistnie dla aplikacji których komplikacja znajduje się na aktywnie używanej tarczy zegarka. Z oczywistych względów nie działa to tak ładnie w sytuacji gdy często zmieniamy tarcze z różnymi komplikacjami.
Dodatkowo należy pamiętać, że odświeżanie aplikacji w tle to pojęcie nieco mylące bo chodzi o odświeżanie *danych* tych aplikacji, a nie samych appek jako takich. Gdy appka się ładuje to i tak musi zaczytać świeże dane i odświeżyć widok. Nieco wyjątkowy jest Dock i dużo bliższy temu co można potocznie zrozumieć pod pojęciem appki działającej w tle. Dlatego wcześniej pisałem, że tak na prawdę w praktyce ustawienie odświezanie w tle tyczy się appek w Dock.
Mogę się mylić, ale z tego co rozumiem po prezentacjach i dokumentacji Apple, jak i z własnego doświadczenia i szkoleń to ogólnie i w dużym uproszczeniu działa to tak jak opisuję poniżej.
- Zegarek zamraża appkę gdy nie jest używana. (czyli właściwie zawsze wszystko jest zamrożone i pewnym wyjątkiem są aplikacje w docku)
- Gdy appka jest wywoływana, zaczytuje zawartość pamięci (aby nie uruchomić się od zera), wysyła żądanie do iOS o najnowszy zbiór danych, iOS przetwarza żądanie, przekazuje do aplikacji, ta to obsługuje swoją "logiką" i przekazuje iOS paczkę z odpowiedzią która jest dopiero przekazywana partnerskiej appce na zegarku. Appka na zegarku odczytuje dane i odświeża widok.
Dlatego to tyle trwa. Nie chodzi o słabą moc obliczeniową tylko o to, że większość logiki aplikacji odbywa się na telefonie i w międzyczasie jest sporo komunikacji.
- Appka na telefonie może zlecić do iOS odświeżenie treści partnerskiej appki na zegarku aby maksymalnie skrócić czas wywołania partnerskiej appki na samym zegarku wycinając połowę komunikacji jaka normalnie by zaszła. Założenie jest takie, że taka partnerska appka ma już komplet najświeższych danych.
- iOS kolejkuje te zlecenia i wysyła zaktualizowane treści do partnerskich appek na zegarku periodycznie lub dynamicznie.
- Periodycznie to znaczy samodzielnie co jakiś czas. Zero kontroli. Telefon stara się przewidzieć kiedy będzie dobry moment w oparciu o szereg czynników którymi Apple się nie dzieli z opinią publiczną.
- Dynamicznie to znaczy gdy uniesiesz rękę z zegarkiem, na przykład po to by komplikacja miała aktualny zestaw danych lub gdy odpalasz appkę na telefonie lub w momencie gdy uruchamia się daną appkę na telefonie czy zegarku.
Dock to jedyne miejsce w zegarku gdzie aplikacje faktycznie NIE są zamrożone, a jedynie wstrzymywane i to też pod warunkiem, że nie ma innej opcji i trzeba zwolnić zasoby dla aktualnie pracującego wątku. Pomysł jest taki by często wysyłać do nich najświeższe dane i by mogły wykonywać na tych danych prostą logikę aplikacji w tle.
Komplikacja natomiast to taki fragment partnerskiej appki która ma za zadanie wyświetlać jedną rzecz i tyle. Nie ma mowy o jakiejkolwiek logice na danych w tle czy coś, więc appka jak najbardziej może być zamrożona a jej komplikacja mimo wszystko wyświetlać aktualne dane z telefonu.
Dlatego właśnie aby to w miarę elegancko działało to programy które chcemy by zawsze były aktualne muszą być dodane do Dock i dlatego aplikacja którą dodamy do komplikacji (a nie ma jej w Dock) uruchamia się szybciej niż taka której w ogóle nie ma ani w Dock ani w komplikacji i uruchamiamy ją raz na ruski rok.
Edited by imrik, 26 July 2017 - 12:51.