Introductie
Bij Mediamatic Lab ontwikkelen we applicaties (apps) voor het Android platform. Vanuit dit oogpunt en omdat we altijd graag op de hoogte blijven van de nieuwste ontwikkelingen op technologisch vlak, ben ik donderdag 22 november naar DroidconNL 2012 geweest.
Er waren veel sprekers over uiteenlopende onderwerpen. Hier is een verslag van de vier meest interessante presentaties die ik heb gezien.
RoboSpice
Veel bestaande apps zijn content driven, d.w.z. de informatie die de app weergeeft wordt verkregen d.m.v. web services. Dit geldt ook voor de apps die we bij Mediamatic ontwikkelen; ze werken samen met ons Anymeta CMS.
Voor het uitvoeren van tijdsintensieve (netwerk) operaties in de achtergrond biedt het Android platform AsyncTasks. Deze class is ontworpen als een vereenvoudigde interface voor threads en wordt idealiter gebruikt voor kort durende operaties (van hooguit een paar seconden). AsyncTasks werken volgens het principe van callbacks: wanneer de thread klaar is wordt er een callback functie aangeroepen die het resultaat van de uitgevoerde thread retourneert.
AsyncTasks hebben echter ook nadelen. Zo zijn ze bijvoorbeeld slecht verbonden met de activity van waaruit ze gestart zijn. Als de activity wordt gestopt tijdens het uitvoeren van de AsyncTask, dan zal de callback naar de activity nog steeds worden aangeroepen, met memory leaks en mogelijke crashes als gevolg. Natuurlijk zijn er binnen Android mogelijkheden om dit soort situaties te voorkomen, maar deze zijn erg omslachtig en bieden nog steeds niet het gewenste gedrag.
RoboSpice daarentegen probeert het beheer van AsyncTasks te verbeteren en eenvoudiger te maken door gebruik te maken van Services. Een service is een applicatieonderdeel dat langdurige operaties in de achtergrond kan uitvoeren zonder gekoppeld te zijn aan een user interface (UI). In het kort:
- Services zijn onafhankelijk van activities
- Ze kunnen (oneindig) lang doorgaan
- Ze blokkeren de UI thread niet
De belangrijkste kenmerken van RoboSpice op een rijtje:
- De RoboSpice service kan benaderd worden vanuit elke android context: requests en resultaten zijn vrij toegankelijk.
- De life cycle van activities wordt door RoboSpice afgehandeld
- Requests en request resultaten zullen nooit verloren gaan wanneer de aanvrager (activity) verdwijnt.
- RoboSpice veroorzaakt dus geen memory leaks
- Resultaten (XML, JSON, etc) zijn vrij toegankelijk en kunnen in diverse formaten worden opgeslagen (caching)
- Ondersteuning voor REST
- Het is open source (http://goo.gl/lw5C7)
Met name omdat de apps die we op dit moment bij Mediamatic ontwikkelen sterk afhankelijk zijn van web services, was deze presentatie erg interessant. Tests zullen moeten uitwijzen of RoboSpice ook inderdaad een nuttige bijdrage kan leveren aan onze producten.
Efficient Android Threading
Deze presentatie gaf meer uitleg over Threads, AsyncTasks en de fundamentele concepten van Android: Activities (ui), Services (operaties in de achtergrond), Content Providers (gedeelde toegang tot data) en Broadcast Receivers (listener voor systeem berichten). Wat doen ze, hoe steken ze in elkaar , wanneer kun je welke het beste gebruiken en wanneer niet?
De inhoud is wellicht wat te technisch om hier kort uit te leggen, voor meer informatie kun je hier de slides bekijken. Voor mij als beginnend Android programmeur was het in ieder geval erg leerzaam.
Railuino
Jörg Pleumann heeft uitleg en een demonstratie gegeven van hoe hij zijn Märklin treinen d.m.v. een Arduino met zijn Android telefoon kan besturen: Railuino. De basis van zijn project gaat eigenlijk alleen om het vervangen van de originele Märklin controller door een Arduino. De Android interface vormt slechts een klein en niet essentieel onderdeel van het project. Desalniettemin geeft het een goed beeld van wat je met een Android telefoon en een Arduino kan doen, ongeacht de toepassing.
De huidige generatie Märklin treinen wordt digitaal bestuurd door een controller die ontworpen is door Märklin zelf. Deze controller kan worden vervangen door een Arduino en wanneer de Arduino juist geprogrammeerd wordt, kun je de treinen, wissels e.d. met de Arduino aansturen. In dit geval vereiste dat kennis van het communicatie protocol via de CAN-bus dat Märklin hanteert.
De interface voor de Arduino wordt in dit project gevormd door een Android telefoon. Communicatie tussen Android en de Arduino komt tot stand door de Android Accessory Development Kit (ADK), bijvoorbeeld door een Bluetooth of USB verbinding. De ADK biedt een algemene implementatie die gebruikers de mogelijkheid geeft om een verbinding te leggen tussen Android en externe hard- en/of software.
In het verleden hebben we bij Mediamatic diverse projecten met Arduino's gedaan. De optie om daar nieuwe toepassingen in combinatie met het Android platform aan toe te voegen is zeer welkom.
PhoneGap
PhoneGap is een open source framework dat ontwikkelaars in staat stelt een cross-platform (iOS, Android, Windows, etc) applicatie te maken door gebruik te maken van web technieken als HTML5, CSS3 en JavaScript. PhoneGap is gebaseerd op het Apache Cordova project.
Het maken van cross-platform applicaties vereist kennis van verschillende besturingssystemen, frameworks en programmeertalen. PhoneGap probeert dit op te lossen door de user interface (UI) te renderen met HTML, CSS en JavaScript. De UI van een PhoneGap applicatie is in feite dus een web browser. Daarnaast biedt PhoneGap een API die de oorspronkelijke besturingssysteem functionaliteit kan aanspreken door JavaScript functies. De applicatie logica wordt dus gemaakt met JavaScript en de PhoneGap API communiceert dit met het besturingssysteem.
Samengevat fungeert de PhoneGap applicatie als een interactieve client voor de gebruiker. De client verkrijgt zijn data van de applicatie server en de server regelt op zijn beurt alle applicatie logica weer met de back-end.
Afsluiting
Al met al was het een nuttige dag. Mijn kennis van het Android platform is vergroot, de belangrijkste dingen die ik heb geleerd zijn:
- Een beter begrip van de principes van Android: Activities, Services, Content Providers en Broadcast Receivers. Meer inzicht in functie en het gebruik van Threads & AsyncTasks. Logging, debugging en good practices.
- Algemene ontwikkelprincipes, ook voor Android, namelijk: hoe het gebruik van Git, Automated Testing & Jenkins (continuous integration system, maakt het makkelijker voor developers om nieuwe features te integreren in het project terwijl gebruikers tegelijkertijd een werkende applicatie kunnen verkrijgen) het ontwikkelproces kunnen versnellen en vereenvoudigen.
- En natuurlijk nieuwe ideeën, zoals zelf iets gaan maken met een Arduino en Android en kijken naar de mogelijkheden van een eenvoudige cross-platform app met PhoneGap.