Jak system Android oszczędza energię?

Paweł Dedio Programowanie 2018-11-03

Witajcie w kolejnym odcinku serii dla chcących nauczyć się programowania. Jak co tydzień przychodzę do Was z kolejną porcją wiedzy o systemie Android. Dzisiaj pokażę wam, jak oprogramowanje od Google oszczędza energię. Wraz z rozwojem telefonów zapotrzebowanie na nią rosło – producenci wprowadzali coraz to większe wyświetlacze a twórcy oprogramowania tworzyli coraz bardziej zaawansowane aplikacje. Programy nie są już tylko prostymi, kilkuokienkowymi aplikacjami działającymi offline – większość serwisów wymaga synchronizacji w chmurze i wykonywania pewnych działań w tle.

Jak to wyglądało z perspektywy programisty?

W początkowych wersjach Androida programiści mieli prawdziwe eldorado, jeśli chodzi o pisanie aplikacji. Mieliśmy dostęp do czego chcieliśmy i kiedy chcieliśmy. Sam pamiętam, że podczas nauki napisałem aplikację, która co kilkanaście sekund sprawdzała lokalizację użytkownika, porównywała ją z wcześniejszymi lokalizacjami zapisanymi w bazie danych i wykonywała zapytania na zewnętrzny serwer. Teraz wyobraźmy sobie sytuację, że na urządzeniu mamy zainstalowane kilkanaście takich aplikacji – brzmi jak jakiś niestworzony scenariusz jednak to prawda. Wystarczy przypomnieć choćby przykład aplikacji Facebooka, która potajemnie nagrywała użytkownika bez jego wiedzy. Nie będę się rozwodził nad moralnością takiego rozwiązania, jednak wyobraźcie sobie jak takie coś drenowało naszą baterię. Na szczęście Google stał się świadomy problemu i postanowił coś z tym zrobić.

Android Marshmallow przychodzi na ratunek!

Jest 28 maja 2015 – zapewne data ta kojarzy wam się wyłącznie z 755 rocznicą odkupienia Kęt i Czeladzi od klasztoru benedyktynek w Staniątkach przez księcia opolsko-raciborskiego Władysława. Nic bardziej mylnego, to właśnie wtedy Google zaprezentowało następce Androida Lollipop. Podczas całego Google I/O tematowi oszczędzania energii zostało poświęcone kilka sesji – niżej podlinkowałem film w którym krótko zostały opisane wszystkie elementy oszczędzania energii. Zostało zaprezentowane również coś, co nazywa się Doze, ale jest to na tyle ważny mechanizm, że poświęcimy mu osobny akapit.

Doze – co to właściwie jest?

Pewnie zauważyłeś nieraz, że gdy włączasz ekran telefonu po dłuższym czasie nieaktywności, to nagle dostajesz kilka powiadomień z różnych aplikacji. Pewnie nie byłeś tego świadomy, ale to jest celowe działanie zaimplementowane przez twórców Androida.

Doze z angielskiego możemy przetłumaczyć jako drzemka – to słowo świetnie oddaje działanie tego mechanizmu. Programiści Androida stwierdzili, że jeśli odłożymy nasz telefon na przykład na szafkę, to wcale nie potrzebujemy tych wszystkich funkcjonalności jakie zapewniają nam różne aplikacje. Dla przykładu aplikacja pobierająca dane giełdowe nie musi tego robić co dwie sekundy kiedy Ty śpisz a telefon leży nieruchomo. Tak właśnie działa Android – jeśli wykryje, że urządzenie leży dłuższy czas nieruchomo z wyłączonym ekranem, wprowadza je w tryb Doze (drzemki). Aplikacje mają ograniczony dostęp do procesora oraz internetu. Wykorzystywanie zasobów odbywa się tylko w dość krótkich okresach. Działa to tak, że system powiadamia naszą aplikację o możliwości wykonania potrzebnych zadań. Na początku okresy te zdarzają się dość często, jednak im dłużej urządzenie pozostaje nieruchome, tym rzadziej okresy te występują. Spójrzcie na grafikę z oficjalnej dokumentacji Doze

Pomarańczowa pionowa kreska symbolizuje wykorzystanie zasobów urządzenia. Zagęszczenie pomarańczowych kresek to normalna praca urządzenia. Po wejściu trybu Doze widzimy, że użycie zasobów występuje tylko w ściśle określonych momentach.

Doze to nie wszystko

Założę się, że większość z nas ma jakieś aplikacje, które używa jedynie raz na jakiś czas. U mnie najlepszym tego przykładem jest aplikacja Shazam. Używam jej jedynie gdy usłyszę jakąś fajną piosenkę i po rozpoznaniu jej, natychmiast ją zamykam. Programiści Androida byli świadomi takiego zachowania użytkownika i wprowadzili App Standby. Jest to coś podobnego do Doze, ale dotyczy wyłącznie pojedynczej aplikacji. System sprawdza, które aplikacje uruchamiamy bardzo rzadko i drastycznie ogranicza im dostęp do zasobów. Ma to sens – po co przykładowo aplikacja Shazam ma łączyć się z Internetem lub przeprowadzać jakieś inne działania skoro aktualnie jej nie potrzebuję. Oczywiście App Standby, podobnie jak Doze, działa tylko, gdy urządzenie jest zasilane z baterii. W momencie, gdy podepniemy je do źródła zasilania, to aplikacje mają już bardziej swobodny dostęp do zasobów.

Co nowego w Androidzie7.0 Nougat?

W Androidzie Nougat Google niewiele zmieniło w kwestii oszczędzania baterii. Największą nowością była zmiana progu uruchomienia trybu Doze. Poprzednio, aby Doze zostało uruchomione, telefon musiał przez jakiś czas leżeć nieruchomo z wyłączonym ekranem. Jednak są sytuacje, w których nie potrzebujemy telefonu działającego w 100% możliwościa. Nawetjeśli jest on w ruchu – przykładowo, gdy jesteśmy w drodze do pracy. Od Androida 7.0 Nougat Doze zostaje uruchomione zaraz po tym jak wygasimy ekran naszego urządzenia. Nie ma tutaj znaczenia, czy urządzenie jest w ruchu czy leży nieruchomo na szafce.

Co z pozostałymi wersjami systemu?

Google nadal kładzie ogromny nacisk na usprawnienie pracy na baterii, ale już nie ma miejsca na taką rewolucję jak w przypadku Androida Marshmallow. Aktualnie zmiany odnoszą się głównie do optymalizacji samego w sobie systemu. Dodatkowo Google mocno ogranicza wykonywanie długotrwałych zadań w tle, przymuszając programistów do jak najefektywniejszego wykorzystywania zasobów systemowych.

Czy to działa?

Rozwiązania wprowadzone przez Google nie pomagają każdemu. Jeśli używasz telefonu bardzo intensywnie przez cały dzień i podłączasz go do ładowania co noc, to praktycznie nie zauważysz usprawnienia pracy baterii. Sporą poprawę odczują natychmiast ludzie, którzy używają smartfona w krótkich odstępach czasu. Tu jest właśnie siła usprawnień Androida – one nie ograniczają zużycia baterii podczas użytkowania systemu, bo to musiało by wiązać się z ograniczeniem mocy urządzenia. Usprawniają za to czas czuwania, kiedy nasz smartfon pozostaje nieużywany. Sam na pewno zauważyłeś, że zostawiając telefon na noc, bez podpiętej ładowarki poziom naładowania spadnie najwyżej o kilka procent – to właśnie zasługa programistów Androida.

Co w przypadku gdy nie chce Doze?

Mimo wielu zalet, Doze ma również swoje wady. Przykładowo możesz dostać jakieś ważne powiadomienie z opóźnieniem. Na szczęście programiści systemu Android pomyśleli o takiej sytuacji i umożliwili wyłączenie trybu Doze. W większości urządzeń nie możemy całkowicie wyłączyć tego trybu, ale możemy wyłączyć go dla wybranych aplikacji. Sposób wyłączenia tego różni się w zależności od producenta nakładki systemowej, jednak przeważnie trzeba szukać tej opcji w ustawieniach pod nazwą „optymalizacja baterii”. Jednak twórcy aplikacji są świadomi w jaki sposób działa Doze i jeśli ich aplikacja będzie wymagała wyłączenia tego trybu, na pewno Cię o to poproszą przy pierwszym uruchomieniu aplikacji.

To już wszystko, co dla Was dzisiaj przygotowałem. Dzięki, że zostaliście do końca :). Za tydzień widzimy się ponownie – opowiem Wam o całej magii, która kryje się za czymś tak prostym, jak wyświetlenie powiadomienia. Do zobaczenia!

Zapraszam również na największe w Polsce forum dla programistów Android. Jeśli macie pytania odnośnie kariery jako programista – zapraszam do działu Kariera programowanie. Zachęcam również do przejrzenia działu Praca oraz zlecenia dla programistów – być może to właśnie tam znajdziesz swoją pierwszą pracę 😉

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacje – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania – jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida – co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?


  • jl

    Oszczędzanie energii to horror dla programisty i nawet nie chodzi o to co oferuje sam android a to co dodają producenci. Czasem są aplikacje które wymagają pracy w tle np rejestracja trasy na podstawie gps i programista nie ma wpływu na to czy aplikacja zostanie ubita. Później są negatywne komentarze, a to nie wina programisty.

  • Donald

    Moim zdaniem względem baterii super to rozwiązuje Sony w swoich telefonach z trybami Stamina wraz z ustawieniami Androida i aplikacji. Tryb Stamina robi to co trzeba po prostu.

    • łukasz Jedryszczyk

      To właśnie na podstawie Staminy powstało doze

      • Kuba Sojka

        Tego nie wiedziałem

  • RS2_15237_THE_END

    Mam pytanie odnośnie aplikacji, które zamykam, a one same próbują się uruchomić kilkanaście razy w ciągu dnia. Oczywiście system je zablokuje, ale wiem, że próbowały. Dlaczego tak się dzieje, po co uruchamiają się aplikacje które rzadko używam? Oczywiście są to aplikacje od których nie potrzebuje powiadomień, i nie widzę sensu aby one działały w tle.

    • Paweł Dedio

      Ciężko stwierdzić nie znając tych aplikacji. Mogą mieć ustawione jakieś alarmy cykliczne, mogą byc wzbudzane przez powiadomienia push (będzie o tym w następnym odcinku).

      • RS2_15237_THE_END

        To są popularne aplikacje, np. Yanosik.

      • RS2_15237_THE_END
        • Kuba Sojka

          Umnie nie ma czegoś takiego rejestr uruchomienia

          • RS2_15237_THE_END

            W Huaweiach na Androidzie 8 jest to standardem. Świetna opcja, masz pełną kontrolę nad aplikacjami.

          • RS2_15237_THE_END
          • maxprzemo83

            Yanosik to akurat próbuje się uruchomić żeby pobrać i wyświetlić reklamę.
            Pozostałe aplikacje pewnie też próbują uruchomić się w tle.

          • RS2_15237_THE_END

            Ale po co ma pobierać coś i się uruchamiać skoro np. dwa dni jej nie używałem ?

          • maxprzemo83

            Jak to po co? Dla pieniędzy. Darmowy program to nie ma się co dziwić. Jak teraz weszłem do aplikacji to były 4 powiadomienia reklamowe. Do tego yanosik to aplikacja do namierzenia tego urządzenia bluetooth notiOne.

          • RS2_15237_THE_END

            Właśnie, dlatego Huawei świetnie to rozwiązał.

          • maxprzemo83

            Ja mam podobne rozwiązanie na Custom Romie ResurrectionRemix. Jest też aplikacja w sklepie Google która to potrafi a nie wymaga roota
            https://play.google.com/store/apps/details?id=rikka.appops
            Używałem sporo czasu, działa perfekcyjnie. Ale trzeba uważać. Bo przy aplikacjach systemowych można sobie namieszać. Jak ustawiłem sobie że aplikacja „Usługi Google Play” mają za każdym razem pytać o pozwolenie na lokalizację telefonu to zasypała mnie takim spamem z tą prośbą że telefonu nie dało się używać 😅
            Nawet pinu nie szło wpisać po restarcie, bo już telefon zawieszało.
            Jak bym nie miał TWRP recovery to chyba bym musiał ustawienia fabryczne robić 😁.
            Więc do aplikacji zewnętrznych super apka, do systemowych lepiej uważać.

          • RS2_15237_THE_END

            Zaraz sprawdzę tą aplikacje bo mam jeszcze telefony Samsunga, sprawdzę jak to działa i czy będzie tak samo dobrze jak na Huawei.

  • Janusz Popo

    Temat coś tak po łebkach kolego. Gdzie usprawnienia Androida 8 i 9? Gdzie opis Menedżera baterii z Androida 9, w którym telefon ma zaimplementowane AI, które uczy się zachowań użytkownika i dynamicznie przydziela zasoby aplikacjom, także i w trybie używania smartfona, a nie tylko przy wygaszonym ekranie?

  • stark2991

    Z tym ulepszaniem pracy na baterii w Androidzie to jest ciężka sprawa. Ludzie gadają „a, znowu się chwalą że poprawili baterię, a i tak będzie trzymać pół dnia”
    No będzie, przecież nie da się zmniejszyć zapotrzebowania procesora czy ekranu na prąd 😀 Można to tylko zoptymalizować, tzn. używać zarządcy procesora, który ustawia niższe zegary, a na ekranie typu OLED można dać ciemny interfejs w aplikacji. Większość ludzi myśli, że jak wcześniej smartfon wytrzymywał 5h oglądania YouTube, to na nowym Androidzie wytrzyma 6, albo 7. A to tak nie działa 🙂

    • luqi

      Da się za to napisać lżejszy system czy mniej zasobożerne animacje
      Z hardwarem nie wygrasz ale też da się kilka niepotrzebnych rzeczy powyłączać kiedy nie są potrzebne
      zawsze coś

  • Dark1

    Moim zdaniem całkiem fajna seria, dobrze się czytało