Gode praksisser og arkitekturer i Android-programmering. Android - praksisser og arkitekturer Copyright Lund & Bendsen A/S



Relaterede dokumenter
Android 2.x CodeJam. Android CodeJam 2.x Copyright Lund & Bendsen A/S

Kvik guide: GT-Command Mobile

Synopsis emnebeskrivelse

Programmering eksamensprojekt - Lectio App

Fjernadgang til BEC s systemer via Portal2

Installations og brugermanual for Android - brugere af Akutudkald.

Installations og brugermanual for Android - brugere af Akutudkald.

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Aftenskole i programmering sæson Registrering af tid. Sæson 2 - Lektion 5

Singleton pattern i Java

Installations og brugermanual for Android - brugere af Akutudkald.

AgroSoft A/S AgroSync

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Fjernadgang til BEC s systemer via Portal2


Installationsvejledning

CLOUD RECORD FAQ. HVILKE TV-BOKSE VIRKER DET PÅ? Cloud Record kan benyttes af kunder med 7410x, 7310, 7210, 7130 og 7120 TV-bokse.

PlejeNet på Android telefoner. Vejledning til PlejeNet på Androidtelefoner

Installations og brugermanual for Android - brugere af Akutudkald.

GUIDE TIL DIN STREM BOX.

Ofte stillede spørgsmålm om Eee Pad TF201 DA6915

ViKoSys. Virksomheds Kontakt System

Ofte stillede spørgsmålm om Eee Pad TF201 DA6915

Ofte stillede spørgsmålm om Transformer TF201


Betjeningsvejledning. for. Vagtcentral MAC2000. PDF created with pdffactory trial version

Installations og brugermanual for Android - brugere af Akutudkald.

Konfiguration af BOOX Nova. Der tages forbehold for trykfejl og ændringer i producentens / Googles software.

Hurtig Start Guide 1

Ændringer i DayCare Touch layout, for at optimere funktionaliteten

Kom godt i gang KMD VALG. Digital Valgliste Installationsvejledning Version 2.4.0

Fejlsikret Windows Fejlsikret start

Inden du går i gang. For Mozilla Firefox brugere. For Internet Explorer brugere

SwanMobile Brugervejledning K2051-A

Installations og brugermanual for Android - brugere af Akutudkald.

Brugervejledning. TDC Scale Assistent til iphone. Copyright NOMADICCIRCLE All rights reserved

Indholdsfortegnelse for kapitel 2

Bluetooth Fitness Armband

Sådan får du Salmebogen på CD-ROM til at fungere i Internet Explorer 7 både under Windows XP og Windows Vista

M Mobility Mobil IP. Installations- & brugervejledning Desktop version Windows 12. august 2014

INSTALLATIONS GUIDE. Sikkerhedspakke (Chili Security Family Pack) TIL PC, MAC OG ANDROID FIBERBREDBÅND TV TELEFONI

I denne manual kan du finde en hurtig introduktion til hvordan du:

BRUGERVEJLEDNING. TDC MobilTekst på Android

TK/TBL / v.0.1. DigiMatch. Elektronisk Kamprapport

Who s to blame? Jeppe Rørbæk. Jeppe.rorbaek@teknologisk.dk Konsulent og underviser på Teknologisk Institut MCP, MCAD, MCSD, MCT

Installations og brugermanual for Android - brugere af Akutudkald.

Installation og opsætning af EjdExplorer 2.4

HTC ONE og HTC ONE mini

Vejledning til OK flådestyring - administrer medarbejdere

INSTALLATIONS GUIDE. Sikkerhedspakke (Chili Security) TIL PC, MAC OG ANDROID FIBERBREDBÅND TV TELEFONI

INSTALLATIONS GUIDE. Sikkerhedspakke (Chili Security) TIL PC, MAC OG ANDROID FIBERBREDBÅND TV TELEFONI

Installations og brugermanual for Android - brugere af Akutudkald.

02101 Indledende Programmering Introduktion til Eclipse

DUNE HD 102 Indhold DUNE HD HDMI WIFI Modtageren Tændt Slukket USB port AV OUT

Sikkerhed på Android. Der kan være forskelle i fremgangsmåden på de forskellige Android modeller.

Der kommer et nyt vindue op. Klik på Udfyld felterne og tryk Create My Account

Installations og brugermanual for Android - brugere af Akutudkald.

2 Få adgang til CropNote

Hurtig Start Guide. Wireless NVR System Connection Reolink

Når du har hentet disse programmer installerer du dem alle og følger guiden herunder.

Tweet dine råd - Og gør dem levende med Vine og Instagram

Brugermanual til applikation Interwalk

INSTALLATIONS GUIDE. Waoo leveres af dit lokale energiselskab. Er du. Sikkerhedspakke (Chili Security) TIL PC, MAC OG ANDROID

Vejledning i hvordan en digital test formidles til eleverne som en opgave i ElevPlan

IntoWords. Nyt dokument. Ordforslag. Hjælpeværktøj.

SecureAware BCP Manual

Brugervejledning. TDC Scale Assistent til Android. Copyright NOMADICCIRCLE All rights reserved

GB-HD8272C-W. Kom godt i gang

Spiked Reality. Kvikguide til oprettelse af tilbud, nyheder og begivenheder. Version 2.0, september 2013

Brugervejledning til chauffører. webtour.mobi. Version Opdateret og seneste version kan altid hentes på

Forside til eksamensprojekt

BRUGERVEJLEDNING TRIC LAGERRAPPORT MODUL TIL MAGENTO MODUL VERSION BRUGERVEJLEDNING TRIC - Lagerrapport

PSYKIATRIENS VIKARCENTER. MinTid. Quickguide. Version 7.0

SecureAware Workflow TNG

HTC ONE og HTC ONE mini

Fable Kom godt i gang

Switchboard. SipDanmark

Servicebrev BørneIntra version 2.10

ODSIF BRUGSANVISNING. TIL WIFI-BOKS-STYRING til rullegardiner. Model: Wifi-boks

Grundopsætning af Piccolo på server og terminal og brug af Check-In

Rejseplanen. trafikinformation via Rejseplanen

Bemærk før brug: Bemærk i brug

PC - installation af Maple 18 med GYM-pakken

Du kan også bruge Dropbox sammen med din Iphone, Android telefon eller anden smartphone.

OptiCaller Client v2.0

Infokiosk i SkoleIntra

UNO vejledning. Indhold

Fable Kom godt i gang

Vedr.: Brugervejledning til TV-inspektion File Uploader

PSYKIATRIENS VIKARCENTER. MinTid. Quickguide. Version 9.1

Brugervejledning 3.0 til WebEx Meeting Center med mødelokaler til samarbejde (CMR Cloud)

Articles... 3 I gang med Adobe Connect... 4 Når du skal invitere deltagere til et Adobe Connect møderum...11 Sådan redigerer du en video optaget i

Kvik guide Mitel MC Klient Android

Hassellunden 4A, 2765 Smørum

Online billede filtrering

Compass GPS installation

Virkefeltsregler i Java

Installations og brugermanual for ios - brugere af Akutudkald.

Sonofon Erhverv. Kom godt i gang. med SMS fra Outlook Brugervejledning. 1107V gældende fra 29. oktober

Transkript:

Gode praksisser og arkitekturer i Android-programmering 1

Om oplægsholderen Jacob Nordfalk nordfalk@lundogbendsen.dk Instruktør for Lund&Bendsen Ekstern lektor på IHK Underviser i Java SE, Java EE, Webserverprogrammering, OOAD, Android Forfatter af http://javabog.dk Udvikler til J2SE, J2EE, Android Har et halvt dusin apps på Android Market Teoriprøven, AndroidElementer, DR Radio, Esperanto-radio Muzaiko og 3-4 andre Har lige sendt de første patches til Androids kildekode! Android 2

Hvorfor nødvendigt med praksisser? Brugerens oplevelse er i centrum Alt er 'åbent og klar til brug' - altid Programmer til mobile enheder har Kun lidt kontrol over hvordan de lukkkes Ingen kontrol over hvordan de startes Stærkt svingende adgang til netværket Brugerens oplevelse forringes væsentligt hvis en app ikke tager højde for dette 3

DR Radio Kildekoden er på http://code.google.com/p/dr-radio-android/source/ 4

5

DR Radio Levende Levende ikon ikon (widget) (widget) Opdatering Opdatering hvert hvert 20. 20. sekund sekund Udsendelse Udsendelse og og næste næste udsendelse udsendelse Spiller Spiller nu nu og og 33 forrige forrige Stamdata Stamdata opdateres opdateres hver hver 3. 3. time time (kanaler, (kanaler, stream stream URLer, URLer, driftmeddelser driftmeddelser etc) etc) 6

Stærkt svingende adgang til netværket Android er enkelttrådet Lav aldrig aldrig aldrig netværkskommunikation i GUI-tråden Opdatér aldrig aldrig aldrig GUI fra baggrundstråd Brug AsyncTask (eller Thread) Har indbygget trådpulje Har indbygget trådsikker kommunikation mellem baggrundstråd og GUI-tråd 7

Stærkt svingende adgang til netværket Data der udløber Cache så længe det giver mening, giv så bruger meddelse om utilgængelighed Stamdata - der sjældent udløber Bundt dem med app'en! Undgå "indlæser, vent venligst"-dialoger der irriterer og blokerer for brug af andre funktioner Start op med en gammel kopi Hent ny udgave i baggrunden Opdater brugerflade hvis stamdata har ændret sig 8

DR Radio 9

Programmatisk brugerflade package dk.firma.projektnavn; import android.app.activity; import android.os.bundle; import android.widget.textview; public class MitProjektAkt extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); TextView tv = new TextView(this); tv.settext("velkommen"); setcontentview(tv); } } 10

Deklarativ brugerflade i XML package dk.firma.projektnavn; import android.app.activity; import android.os.bundle; public class MitProjektAkt extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="velkommen" /> 11

Aktivitets-stakken Intent Intent Intent 12

Androids applikationsarkitektur Ansvarlige Ansvarlige for for ét ét skærmbillede skærmbillede Opretter Opretter views views og og layout layout (typisk (typisk fra fra xml) xml) registrerer registrerer lyttere lyttere MVC MVC "View-Controller" "View-Controller" Android Framework instantierer AndroidManifest.xml Applikationens navn Tilladelser Aktiviteter, services,... Intent filtre Aktivitet Intent Aktivitet Intent Aktivitet viser layout.xml JVM Kommunikation Kommunikation mellem mellem aktiviteter aktiviteter URI URI 'på 'på steroider' steroider' Har Har et et rigt rigt antal antal felter felter til til forskellige forskellige data data skaffes skaffes med med getintent() getintent() 13

Sende data med intent Nøgle-værdipar kan sendes med intent i.setextra(string nøgle, værdi) Aflæses i modtageraktivitet med getintent().getextras().getstring(nøgle) AfsenderAktivitet Intent i = new Intent(this, ModtagerAktivitet.class) i.putextra("navn", "Jacob") i.putextra("alder", 40) this.startactivity(i); ModtagerAktivitet Intent i = getintent(); String navn = i.getextras().getstring("navn"); int alder = i.getextras().getint("alder"); 14

Eksempler på intents Åbne opkaldsvinduet new Intent(Intent.ACTION_DIAL, Uri.parse("tel:26206512")) Ringe op direkte new Intent(Intent.CALL, Uri.parse("tel:26206512")) Åbne browseren new Intent(Intent.ACTION_VIEW, Uri.parse("http://javabog.dk")) Åbne vindue til at skrive epost-meddelese intent = new Intent(android.content.Intent.ACTION_SEND); intent.settype("plain/text"); intent.putextra(intent.extra_email, new String[] {"jacob.nordfalk@gmail.com"}); intent.putextra(intent.extra_subject, emne); intent.putextra(intent.extra_text, txt); Åbne vindue til at skrive SMS intent=new Intent(Intent.ACTION_VIEW); intent.settype("vnd.android-dir/mms-sms"); intent.putextra("sms_body", besked); intent.putextra("address", nummer); 15

Hvor skal vi lægge modellen? Afhænger af koblingsgrad Tæt koblede aktiviteter har nok fælles model Data kun nødvendige i én aktivitet lægges Der er kun én bruger! en Singleton (eller lignende) rækker Hvor stor bliver kodebasen? Næppe mere end 30 (ydre) klasser... Sjældent arbejde til mere end 3 udviklere 16

instantierer Jam, så er strukturen jo oplagt... Android Framework Aktivitet Intent Aktivitet Intent Aktivitet viser layout.xml instantierer ved opstart Levende ikon Én Én JVM JVM pr. pr. app app :-) :-) JVM <<Singleton>> Model 17

Men men men... Bruger oplever at alt er 'åbent og klar til brug' Bruger kan skifter tilbage til de sidst 8 brugte programmer - og fortsætte hvor han slap Kun lidt kontrol over lukning Framework må smide JVMs ud af hukommelsen - uden varsel - og senere genskabe dem Services og notifikationer kan mindske risikoen for at det sker, men ikke afværge det med sikkerhed Ingen kontrol over hvordan app (gen)startes App kan blive genstartet midt i en sekvens af skærmbilleder - i en frisk proces/jvm! 18

Aktiviteters livscyklus Aktiviteter genstartes ofte, f.eks ved vending af skærmen fysisk tastatur skydes ud/ind hvis klaptelefon åbnes/lukkes hvis telefonsprog sprog ændres kan slås fra, men... Så snart en app ikke er synlig kan den risikere at blive slået ihjel Framework kalder onsaveinstancestate(bundle b) gemmer View's tilstand 19

Genskabning af aktiviteter 20

Anbefalet arkitektur Er Er flygtige: flygtige: (gen)instantieres (gen)instantieres af af framework framework efter efter behov behov Framework Framework persisterer persisterer views' views' tilstand tilstand onsaveinstancestate(bundle b) b) oncreate(bundle oncreate(bundle savedinstancestate) savedinstancestate) Android Framework instantierer Framework Framework husker husker indhold indhold Aktivitet Intent Aktivitet Intent Aktivitet Framework Framework instantierer, instantierer, før før noget noget andet andet JVM MinApplication Application singleon anvender instantierer <<Singleton>> Model Levende ikon 21