143

Android vs iOS – czyli czy 4 to więcej niż 8?

Android – iOS, czyli temat z serii „Używaj lupki/ Google, bo temat wałkowany wiele razy osłabia nie tylko mnie”. Wciąż jednak łatwo jest natknąć się na niedomówienia i szerzące dezinformacje komentarze widniejące na najróżniejszych stronach i serwisach, gdzie teksty typu „Nie znasz się. Dzięki optymalizacji iOS-a iPhone z 2GB RAM działa lepiej niż Android z 4GB RAM” są normą.

Pytanie tylko czym właściwie jest ta „optymalizacja iOS-a”? Zacznijmy od podstawowej kwestii, czyli…

Czym tak właściwie jest pamięć RAM?

Z pewnością można by tu napisać obszerny tekst utrzymany w naukowym i mało zrozumiałym dla ogółu języku, ale spróbujmy ugryźć temat w sposób bardziej przystępny. W uproszczeniu, pamięć RAM to pamięć operacyjna, która służy jako miejsce dla uruchomionych aplikacji. Możecie wyobrazić to sobie poprzez analogię do stołu. Im większy stół, tym więcej gości przy nim usiądzie i talerzy się zmieści. Proste, prawda?

Tak więc, gdy edytujemy fotkę w Snapseedzie, montujemy film w LumaFusion, przeglądamy plik PDF, czy beztrosko surfujemy po sieci przeglądając kolejne porcje memów, apki wraz z ich zawartością (zdjęciami, filmami, itd.) wczytywane są do pamięci RAM, co pozwala na szybki dostęp do nich.

Jedną z głównych różnic jest to, w jaki sposób system traktuje aplikacje będące w tle

iOS korzysta z a) zapisów stanu oraz b) wydajnej kompresji danych by zmieścić więcej aplikacji w stosunkowo niewielkiej przestrzeni.

a) zapis stanu łatwo skojarzyć z zapisem w grze. Przykładowo, grając partyjkę w Age of Empires I można zapisać grę, zaatakować wroga, a w razie niepowodzenia wczytać zapis sprzed ataku

b) kompresję można skojarzyć z plikami RAR. System bierze wiele plików i kompresuje je tak, że zajmują kilka(-naście) razy mniej miejsca (apka ważąca 300MB po kompresji może „ważyć” zaledwie 10MB), choć – co oczywiste – iOS nie korzysta z kompresji RAR

Pozwala to oszczędzić mnóstwo miejsca w pamięci, lecz mocno ogranicza możliwości aplikacji będących w tle. Działanie tego mechanizmu można dość łatwo zobaczyć. Często jest tak, że po powrocie do będącej w tle aplikacji, ta przez pierwszych kilka sekund nie reaguje na interakcje. Dzieje się tak, ponieważ użytkownik widzi zapis aplikacji sprzed jej zminimalizowania, podczas gdy system rozpakowuje skompresowany zapis stanu tej aplikacji. Gdy skończy, apka jest gotowa do działania.

Wyjątkiem są sprecyzowane przez Apple typy aplikacji, np. VoLTE, odtwarzanie muzyki, śledzenie lokalizacji (np. w Endomondo) i kilka innych, których proces ten nie dotyczy.

Android nie kompresuje danych aplikacji będących w tle, lecz zatrzymuje ich pracę, jeśli nie jest ona konieczna. Przekłada się to na większe wykorzystanie pamięci RAM, lecz umożliwia rozbudowaną wielozadaniowość oraz pracę w tle. Android korzysta także z innych rozwiązań, jak Swap to zRAM, który – podobnie jak iOS – kompresuje dane aplikacji uruchomionych w tle. Tradycyjny SWAP przenosi pliki z RAM-u do pamięci wewnętrznej (dysk HDD/ SSD). Swap to zRAM pozostawia pliki w RAM-ie (konkretnie to zRAM-ie), lecz w skompresowanej postaci.

Gdy miejsca zaczyna brakować…

System „wyrzuca” niepotrzebne aplikacje by zwolnić nieco miejsca dla nowych apek.

  • w przypadku iOS’a sytuacja jest dość prosta – będące w tle aplikacje są kompresowane, a jeśli pamięci zaczyna brakować to są wyrzucane
  • w przypadku Androida sytuacja jest nieco bardziej złożona, ponieważ producenci stosują wiele autorskich rozwiązań, jak nakładka systemowa czy mechanizm OoM (Out of Memory). W efekcie to producent decyduje o tym, kiedy chce usunąć aplikacje z pamięci. Jedni producenci radzą sobie lepiej, inni nieco gorzej. Dokładniejsze dane możecie znaleźć w tym rankingu – https://dontkillmyapp.com/.

Wybór aplikacji nie jest przypadkowy, a decyduje o nim Low Memory Killer Daemon (LMKD), którego działanie różni się to w zależności od ilości pamięci RAM w urządzeniu. Jak precyzuje opis tego mechanizmu (https://source.android.com/devices/tech/perf/lmkd), na urządzeniach z niewielką ilością pamięci RAM (obecnie można tak określić urządzenia z 2GB RAM i Androidem 9/10 na pokładzie) małe ilości wolnej pamięci traktowane są jako coś normalnego. Z kolei na urządzeniach z większą ilością pamięci (powiedzmy 8 GB i więcej) niewielka ilość wolnej pamięci traktowana jest jako sytuacja niepożądana. Strategie radzenia sobie z takimi sytuacjami określa Low RAM Configuration (https://source.android.com/devices/tech/perf/low-ram), które pozwala zdecydować o tym, co system ma zrobić by zwolnić nieco pamięci.

Kiedy ma to znaczenie?

Scenariuszy jest mnóstwo, np.

– czasami gra wymaga pobrania sporej ilości danych. Naturalnym krokiem jest zminimalizowanie takiej gry by pliki pobierały się w tle, podczas gdy użytkownik robi coś innego, np. ogląda filmiki na YouTube. Android w takim scenariuszu sobie poradzi, ponieważ będąca w tle gra może pobrać potrzebne pliki. iOS zatrzyma pobieranie, a po powrocie do gry oczom użytkownika ukaże się dokładnie ten sam widok, jaki widział minimalizując grę

– w przypadku pobierania dużych plików z chmury do aplikacji (np. podczas pobierania filmu z OneDrive do Infuse na iOS może wystąpić błąd, a pobieranie zakończy się porażką)

Wbrew pozorom nie oznacza to, iż aplikacje nie mogą wykonywać zadań w tle, bo mogą lecz przez bardzo ograniczony czas. Aby było to możliwe, deweloper odpowiedzialny za daną aplikację musi skorzystać z udostępnionego przez Apple mechanizmu, który pozwoli apce pracować jeszcze przez chwilę. W pierwszym z wymienionych przypadków (pobieranie plików w grze) często nie jest możliwe pobieranie plików po zminimalizowaniu gry. W drugim przypadku (pobieranie filmu z chmury do odtwarzacza wideo) może zakończyć się to a) sukcesem lub b) błędem, co wynika z:

a) aplikacja ukończyła zadanie, jakie było jej powierzone
b) aplikacja została „ubita” przez system nim zdążyła zakończyć powierzone jej zadanie

Aplikacje na iOS NIE zawsze są lżejsze niż te na Androida

Oba systemy prezentują sobą różne podejścia do zarządzania plikami w tle, jednak w przypadku aktualnie otwartych aplikacji zachowują się bardzo podobnie,. Dokładnie temat ten przeanalizował „profesor” Gary z GaryExplains.

Źródło: http://bit.do/frP7Y (6:39)

Jak wykazał przeprowadzony przez niego test (wyniki widoczne są na obrazku powyżej) aplikacje na iOS’a nie zawsze potrzebują mniej pamięci RAM niż ich wersje dla Androida. O ile YouTube potrzebował dużo mniej pamięci (90MB zamiast 184MB), o tyle gra Temple Run 2 potrzebowała jej o wiele więcej (364MB zamiast 211MB)

To dobrze jeśli smartfon używa dużo pamięci RAM

RAM można podzielić na kilka typów, a wśród nich Free RAM (wolny RAM) oraz Available RAM (dostępny RAM). Wolny RAM oznacza, iż pamięć nie jest wykorzystywana w żaden sposób, co jest nieefektywne i niepożądane. W końcu nie bez powodu przyjęło się, że im lepszy jest system, tym mniej Free RAM-u pozostawia. Dobry system potrafi tę wolną przestrzeń zagospodarować i to właśnie dlatego istotny jest Available RAM. Oznacza to, że pamięć jest wykorzystywana przez system, np. jako miejsce do caschowania (w przypadku buszowania po sieci oznacza to, że zawartość strony jest pobierana i zapisywana w pamięci cache.

Więc w przypadku ponownego uruchomienia tej strony ponowne pobieranie zawartości nie będzie konieczne, ponieważ urządzenie wczyta ją z cache właśnie), lecz gdy potrzebne będzie miejsce dla nowo uruchomionej aplikacji to część plików z cache zostanie usunięta. Urządzenia z Androidem mają tu przewagę, ponieważ obecne flagowce oferują nawet 12GB RAM (a niebawem nawet 16GB), podczas gdy iPhone’y „zaledwie” 4GB. Gdy na rynek trafił OnePlus z 8GB RAM pojawiły się komentarze typu „A po co komu tyle pamięci w smartfonie”, „Ten smartfon ma więcej pamięci niż mój komputer!”, lecz część pamięci (z tego co pamiętam było to 2GB RAM) miała posłużyć właśnie jako pamięć cache. iPhone’y nie oferują tak dużo pamięci, więc możliwości są bardziej ograniczone.

Podsumowując

Powtarzania niczym mantra fraza „optymalizacja iOS’a” to nie tylko mit, ale także fakt. Wynika on z tego, że projektując system iOS, Apple dostosowało go z myślą o określonym typie urządzeń, gdzie poprzez dostosowanie należy rozumieć „dostosowanie do specyfiki danej kategorii urządzeń”, np. smartfony mają określone ograniczenia (brak możliwości wymiany podzespołów, rozbudowy pamięci) oraz priorytety (wydajność energetyczna), które należy uwzględnić podczas tworzenia systemu.

W efekcie, firma poszła na wiele kompromisów w kwestii „wydajność energetyczna” – „możliwości i funkcjonalność”, które przekładają się na wspomnianą optymalizację iOS’a. Warto jednak wiedzieć, iż „Mój iPhone z 2GB RAM działa lepiej niż Android z 4GB” to temat na osobną dyskusję.