Tips om batterijverbruik van Android apps te optimaliseren

Het is een bekend probleem van onze mobieltjes: ze werken geweldig, tot ze ineens leeg zijn. Als je batterij snel leegloopt, kan dat te maken hebben met een app die meer energie verbruikt dan nodig is. Als ontwikkelaar kun je hier tijdens de ontwikkeling van een Android app rekening mee houden. Zelfs na de lancering van de app kun je dit nog optimaliseren. In dit blog geven we tips: de gebruikers van je app zullen je er dankbaar voor zijn!

Het vinden van de oorzaak begint met meten

In de afgelopen jaren zijn we dit probleem bij verschillende klanten tegengekomen. Zij kregen signalen uit de markt dat hun app veel batterij verbruikt. De eerste stap om dit op te lossen, is de oorzaak te zoeken en dat begint met meten.

Met name voor ontwikkelaars die buiten de ‘native’ Android stack werken (bijvoorbeeld crossplatform Xamarin ontwikkelaars), kan het vinden van de oorzaak een uitdaging zijn. Hoewel de meesten bekend zijn met Android Studio als IDE, is de Profiling tool minder bekend. Deze meet het verbruik van processor, geheugen, netwerk en energie gedurende het gebruik van een app. Om batterijverbruik te meten is vooral het energieverbruik van belang.

Android studio interface

Aandachtspunten voor energieverbruik

Wanneer je in de Profiling tool op het Energy venster klikt, dan zien we dat deze is opgebouwd uit CPU, network en GPS. Dit zijn de aandachtspunten om het energieverbruik te beperken. In de volgende paragrafen zoomen we in op deze onderdelen om te kijken hoe je deze kunt optimaliseren voor energieverbruik.

CPU

Het ligt voor de hand dat de processor, ofwel CPU, energie verbruikt. Iedere coderegel die de app uitvoert, vraagt capaciteit van de processor. Toch zit daar meer achter dan je misschien denkt.

Van sommige acties weet je waarschijnlijk dat deze veel van de processor vragen, bijvoorbeeld het raadplegen van databanken door middel van SQL-query’s en het serialiseren en deserialiseren van json berichten wanneer de app met internet communiceert.

Voor ieder van deze problemen is specifieke documentatie te vinden, maar voor nu is het belangrijk om ze te identificeren.

In de Profiler tool zie je deze processen terug als pieken in het processorgebruik. Door in te zoomen op het CPU-gebruik krijg je een overzicht van alle verschillende threads die op een bepaald moment actief zijn en welke processen daarop precies worden uitgevoerd. Als hieruit bijvoorbeeld blijkt dat SQL-query’s oververtegenwoordigd zijn en pieken veroorzaken, dan kun je controleren of er query’s zijn die je kunt verbeteren. Of misschien zijn bepaalde query’s zelfs helemaal niet nodig als je de resultaten langer in het werkgeheugen kunt vasthouden. Hetzelfde geldt voor communicatie met het internet. Haalt de app regelmatig data uit de cloud? Dan kan je met de juiste caching-strategie eerder opgehaalde resultaten bijhouden, zodat die niet onnodig nog een keer worden opgehaald.

Profiler tool

CPU: renderen

We hebben nu een paar processen gezien die veel capaciteit van de processor vragen. Het belangrijkste CPU-proces van iedere app is echter het renderen van het scherm. Daarmee zorgt Android dat het scherm op verschillende devices dezelfde lay-out toont.

Wat is renderen?

Tijdens het renderen vraagt Android in feite aan ieder onderdeel op het scherm hoeveel ruimte dat onderdeel denkt nodig te hebben. Vervolgens pakt Android het scherm van het specifieke apparaat erbij, bijvoorbeeld een Samsung Galaxy, en gaat passen en meten. Als onderdelen van elkaar afhankelijk zijn, of in zichzelf ook uit meerdere onderdelen zijn opgebouwd, dan gaat Android een paar keer op en neer het scherm af. Dit doet ze om de gewenste afmetingen op te vragen, deze te vergelijken met de beschikbare schermoppervlakte om vervolgens nieuwe afmetingen uit te delen aan de onderdelen. Net zolang tot de optimale oplossing is gevonden. Hoe complexer de layout, des te langer dit proces duurt en energie verbruikt.

Een mooi schermontwerp is niet altijd eenvoudig om te bouwen. Toch is het belangrijk dat dit gebeurt, want een goede user experience is essentieel voor het succes van een app. Veel Android programmeurs besteden dan ook veel tijd en aandacht aan responsive design. Het is daarom belangrijk om te weten dat in dit proces een pixel vaak meerdere keren gerendered wordt. Het is echter vaak niet (precies) in te schatten in hoeverre de layout invloed heeft op de processor, en dus het batterijverbruik.

Gelukkig heeft Android hiervoor een tool ontwikkeld. Deze helpt programmeurs schermen zo efficiënt mogelijk op te bouwen. De tool checkt hoe vaak pixels gerendered worden. Dit fenomeen heet “overdraw”.

Je vindt deze onder de ontwikkelaarsopties in het instellingenmenu van Android. Daar kun je het tonen van overdraw aanzetten. Er verschijnt dan een extra laag over jouw app die in verschillende kleuren laat zien hoeveel overdraw er in een scherm zit. Als er geen extra kleur over een onderdeel wordt getekend, dan zijn de pixels van dat onderdeel één keer gerendered. Bij een groene of blauwe kleur is dat twee of drie keer. Dit is meestal niet te voorkomen en acceptabel als het aankomt op batterijverbruik. Vanaf vier of meer keren renderen, kleurt Android oranje en rood. Dit betekent dat de layout zo complex is geworden, dat Android aanzienlijk meer rendercycli nodig heeft dan wenselijk is. (Bron.)

gpu-overdraw-after

Je kunt dit doen wanneer je een app ontwikkelt, maar houd er rekening mee dat iedere aanpassing aan je app ook gevolgen heeft voor de app. Iedere verandering op het scherm zal opnieuw extra rendercycli betekenen en dus de batterij zwaarder belasten tijdens het gebruik van de app.

Network

Vrijwel alle apps maken gebruik van internet om data op te halen en te versturen en hoewel dit de standaard manier is om apps te bouwen, is dit nog steeds erg belastend in energie verbruik. Er is namelijk niet alleen energie nodig om de data te versturen, de mobile of WiFi radio’s hebben ook extra energy nodig om op te starten en aan te blijven om op een antwoord te wachten. Als je app alleen online werkt, dan kun je batterijverbruik besparen door de netwerk-calls efficiënter te bouwen. Dat doe je bijvoorbeeld door individuele requests naar de back-end samen te voegen. Een andere manier is door caching te implementeren. Let daarbij wel op een goed uitgewerkte caching strategie, je moet een goede afweging maken welke data wel en niet gecached kan worden en wanneer data dan ververst moet worden.

GPS

Als je app GPS gebruikt, dan vereist dat vanzelfsprekend ook veel batterijcapaciteit. Wanneer je app echt afhankelijk is van GPS, bijvoorbeeld om de locatie of route te bepalen, dan kun je niet makkelijk zonder. Sinds Android 8.0 zijn er wel nieuwe mogelijkheden bijgekomen om de invloed van GPS op het batterijverbruik te verminderen. Voor locatie bepaling kan Android namelijk ook gebruik maken van Wifi en telefoon-mast signalen. Met deze nieuwe instelling bepaalt Android zelf wanneer die gebruik maakt van GPS of van alternatieven en zullen gebruikers van uw app met Android 8.0 of hoger langer van uw app kunnen genieten.

Geheugen

Tot slot, in tegenstelling tot wat je misschien denkt, is geheugengebruik niet van invloed op het batterijverbruik. Data in het geheugen laden natuurlijk wel, omdat de CPU dit doet, maar als het eenmaal in geheugen staat, heeft dat geen verdere invloed. Toch is het belangrijk om tijdens het gebruik van de profiler hier goed op te letten. Als een app veel geheugen gebruikt, zal deze vaker het ‘garbage collection’ proces doorlopen en dat heeft wel degelijk een negatieve invloed op batterijverbruik. Tevens wordt hier direct zichtbaar of er memory-leaks in de app zitten.

In 4 stappen aan de slag met energiebesparing

Nu weet je waar je op moet letten als je app veel batterij verbruikt. Maar hoe ga je daar mee aan de slag? Wij adviseren je dit te doen in vier stappen:

1. Maak een debug-versie van je app
2. Installeer deze op een Android toestel
3. Installeer Android Studio en start de Profiler tool
4. Meet welke onderdelen ‘pieken’

Met de tips die we je eerder in dit blog gaven, weet je nu waar je op moet letten. Je weet wat een piek betekent en hoe je de onderdelen aanpast, zodat je app minder batterij verbruikt. Dit is de moeite waard, want een optimaal batterijverbruik draagt zeker bij aan de populariteit van je app. Niemand houdt van batterij-slurpende apps.

 

Geïnteresseerd?

Wil je eens praten over hoe we jouw apps kunnen optimaliseren? Neem vrijblijvend contact met ons op of bel naar +31 40 30 41 330.

Meer artikelen

Applicaties integreren? Denk ook aan datavirtualisatie

Applicaties integreren? Denk ook aan datavirtualisatie

Het integreren van data uit verschillende systemen heeft veel voordelen, maar is tegelijkertijd één van de meest complexe onderwerpen binnen IT-architectuur. Gelukkig staat IT nooit stil en zijn ook op dit gebied interessante ontwikkelingen gaande. Daarvan is...

Buiten je comfortzone leer je jezelf kennen

Buiten je comfortzone leer je jezelf kennen

Solution architect en medeoprichter Patrick Deenen leerde op vakantie, bovenop een vulkaan, dat hij tot meer in staat is dan hij dacht Patrick is medeoprichter en -eigenaar van Open Circle Solutions en daarnaast solution architect. Hij en zijn vrouw Wendy vertellen...

Nieuwsbrief

Meld je nu aan voor Open Circle Stories en krijg een verzameling artikelen, tips, nieuws en verdiepingen in je mailbox.

Pin It on Pinterest

Share This