Android - Tips & Tricks

Relevanta dokument
Android fortsättning. TDDD80 Mobila och sociala applikationer

Android översikt. TDDD80 Mobila och sociala applikationer

Agil användbarhetsutveckling för handhållna enheter. Per Lind

Android översikt. TDDD80 Mobila och sociala applikationer

Entreprenöriell programmering. Android översikt

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Riktiga Vykort Partner App Teknisk beskrivning

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Android - En översikt samt titt på utvecklingsmiljö. Kalle Prorok 12 nov 2013

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Objektorienterad Programkonstruktion. Föreläsning jan 2016

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Föreläsning 3. Stack

Föreläsning 3. Stack

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Entreprenöriell programmering TDP028

Objektorienterad Programmering (OOP) Murach s: kap 12-16

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Classes och Interfaces, Objects och References, Initialization

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Lösningsförslag till tentamen

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

DAT043 Objektorienterad Programmering

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Lösningar för tenta 2 DAT043,

Föreläsning 14. Filhantering

Föreläsning 8: Exempel och problemlösning

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Recitation 4. 2-D arrays. Exceptions

OOP Objekt-orienterad programmering

Tentamen. Lösningsförslag

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Lösningar till tentamen i EDAF25

Dugga Datastrukturer (DAT036)

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

FactoryCast HMI. Premium & Quantum PLC. Applets

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Kap J 7-1 Mer om arv. (superklass) (subklass)

Föreläsning 12: Exempel och problemlösning

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Polymorfi. Objektorienterad och komponentbaserad programmering

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Att skriva till och läsa från terminalfönstret

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Parallellism, återblick

Tentamen FYTA11 Javaprogrammering

Lösningsförslag FYTA11 Javaprogrammering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen, EDA501 Programmering M L TM W K V

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Lösningsförslag till exempeltenta 2

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Föreläsning 2. Länkad lista och iterator

Fördjupad Java. Undantagshantering. Fel

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Objektorienterad programutveckling, fk

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Laboration 13, Arrayer och objekt

Tillämpad programmering

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Arv. Objektorienterad och komponentbaserad programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

TDDD78 Viktiga begrepp, del 2

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

JAVAUTVECKLING LEKTION 4

Snabbstart för Novell Vibe Mobile

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

LULEÅ TEKNISKA UNIVERSITET

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Algoritmer. Två gränssnitt

Tentamen i Objektorienterad programmering

Transkript:

Android - Tips & Tricks Richard Davison Developer Mobility richard.davison@cgi.com 16 April 2014 CGI Group Inc. CONFIDENTIAL

Agenda Intro IDE och emulator optimeringar Resurshantering XML rätt och fel Designprinciper List-optimeringar - Picasso Fragments Trådhantering, EventBus och rotation Frågor 2

Intro Android ios Microsoft BlackBerry Others 12% 1% 4%2% 82% Gartner, nov 2013 3

IDE och Emulator Eclipse 4.4 Luna Java 7 eclipse.ini Android studio Emulator Vaska den befintliga Använd Genymotion http://www.genymotion.com/ RAM DISK1111 Java 7 4

Resurshantering - res Res-mappen Default DP - Density Indipendent Pixels Android använder inte Pixlar Lägg dina värden i - res/values/dimens.xml <resources> <dimen name="space_l">16dp</dimen> <dimen name="space_m">8dp</dimen> <dimen name="space_s">4dp</dimen> </resources> Alternative Hanterar resurser automagiskt 5

Resurshantering - fortsättning Refs - referenser peka på andra resurser beroende på konfiguration Exempel - res/values-sw600dp/refs.xml & res/values-large/refs.xml <resources> <item name="activity_main" type="layout">@layout/activity_main_twopane</item> </resources> SW = smallest width, large = stor enhet Kör activity_main_twopane istället för activity_main när vi har en surfplatta 6

XML Djupa layouter ger sämre prestanda Platta ut RelativeLayout is your friend GridLayout - ungefär som HTML <table> TIPS Prefix för android:id som definierar view-typ img_profile btn_register txt_name lay_button_wrapper <GridLayout xmlns:android="http://schemas.android.com/apk/ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/lay_grid" android:layout_width= match_parent" android:layout_height="wrap_content" android:columncount="3" tools:context=".gridlayoutactivity" > <Button android:id="@+id/btn_example_0" android:layout_column="0" android:layout_gravity="left top" android:layout_row="0" android:text="button" /> <Button android:id="@+id/btn_example_1" android:layout_column="1" android:layout_gravity="left top" android:layout_row="0" android:text="button" /> <Button android:id="@+id/btn_example_2" android:layout_column="2" android:layout_gravity="fill_vertical" android:layout_row="0" android:layout_rowspan="2" android:text="button" /> <Button android:id="@+id/btn_example_3" android:layout_column="0" android:layout_columnspan="2" android:layout_gravity="fill_horizontal" android:layout_row="1" android:text="button" /> </GridLayout> 7

Designprinciper = Android är INTE ios Olika OS = olika former av navigering, layout, designspråk Ikoner, 3d perspektiv, inte tvingad till en avrundad kvadrat Undvik splashscreens - behövs inte Använd ActionBar - är sammanhängande, uppfinn inte hjulet på nytt Använd appcompat library för ActionBar API 8+ LÄS design guidelines - https://developer.android.com/design/index.html 8

List-optimeringar - behind the scene 9

List-optimeringar Dyrt att köra inflate() och findviewbyid() återanvänd convertview i din adapter ViewHolder pattern Demo Remote-images i en listvy, cache? Picasso Picasso.with(context).load( http://www.example.com/img.jpg").into(imageview); 10

List-optimeringar - Recycle, ViewHolder public View getview(int position, View convertview, ViewGroup parent) { View view = inflater.inflate(r.layout.list_item_complex, null); TextView textview = (TextView) view.findviewbyid(android.r.id.text1); TextView textview2 = (TextView) view.findviewbyid(android.r.id.text2); ImageView imageview = (ImageView) view.findviewbyid(android.r.id.icon); textview.settext(getitem(position).tostring()); textview2.settext(getitem(position).tostring()); imageview.setimageresource(getrandombaconimage()); return view; public View getview(int position, View convertview, ViewGroup parent) { ViewHolder holder; if (convertview == null) { convertview = inflater.inflate(r.layout.list_item_complex, parent, false); holder = new ViewHolder(); holder.textview = (TextView) convertview.findviewbyid(android.r.id.text1); holder.textview2 = (TextView) convertview.findviewbyid(android.r.id.text2); holder.imageview = (ImageView) convertview.findviewbyid(android.r.id.icon); convertview.settag(holder); else { holder = (ViewHolder) convertview.gettag(); holder.textview.settext(getitem(position).tostring()); holder.textview2.settext(getitem(position).tostring()); holder.imageview.setimageresource(getrandombaconimage()); return convertview; private static class ViewHolder { ImageView imageview; TextView textview; TextView textview2; 11

Fragments Mini-activities, egen lifecycle, byggstenar Lätt att optimera för tablet Använd INTE constructor Implementera en statisk factory metod private static final String EXTRA_SOME_INT = "extra_some_int"; public static MyFragment newinstance(int someint) { MyFragment myfragment = new MyFragment(); Bundle args = new Bundle(); args.putint(extra_some_int, someint); myfragment.setarguments(args); return myfragment; TIPS När du startar en activity, använd även där en statisk metod private static final String EXTRA_PARAM_1 = "extra_param_1"; private static final String EXTRA_PARAM_2 = "extra_param_2"; public static void startactivity(context context, String param1, int param2){ Intent intent = new Intent(context, ThisActivity.class); intent.putextra(extra_param_1, param1); intent.putextra(extra_param_2, param2); context.startactivity(intent); 12

Fragments - fortsättning Lägg till fragment, oncreate - check ifall det redan finns Fragment fragment = MyFragment.newInstance(20); FragmentManager fm = getsupportfragmentmanager(); if (fm.findfragmentbyid(android.r.id.content) == null) { fm.begintransaction().add(android.r.id.content, fragment).commit(); Back stack, animation, bakåtknapp FragmentTransaction transaction = fm.begintransaction(); transaction.replace(android.r.id.content, MyFragment.newInstance(20)); transaction.addtobackstack(null); transaction.settransition(fragmenttransaction.transit_fragment_open); transaction.commit(); 13

Trådhantering Async task Finns andra alternativ, bättre för lifecycle events Svårt med configchanges, mellan fragments, services etc <activity android:name="myactivity" android:configchanges="orientation keyboardhidden screensize" /> Headless fragment, lever utanför din activity setretaininstance(true); 14

Trådhantering - fortsättning Jobbigt med callbacks, tänk på activity lifecycle, och referensen till din activity Enkel lösning EventBus by Två steg Registrera din klass för att ta emot event (av en viss typ) Posta eventet Fungerar mellan ALLA klasser, i alla trådar, automagiskt 15

Trådhantering - EventBus demo Registrera event och implementera metoder EventBus.getDefault().register(this); public void onevent(myeventclass object){ dosomething(); public void oneventmainthread(myeventclass object){ dosomething(); Posta ditt event EventBus.getDefault().post(new MyEventClass()); EventBus innehåller en AsyncExecutor T.ex activity, kör i oncreate() OBS T.ex activity, kör i ondestroy() AsyncExecutor.create().execute(new RunnableEx() { @Override public void run() throws Exception { Glöm ej avregistrera din klass try{ EventBus.getDefault().unregister(this); Object result = backgroundoperation(); EventBus.getDefault().post(result); catch(exception ex){ ex.printstacktrace(); EventBus.getDefault().post(new Events.MyErrorEventClass(ex)); ); 16

Länkar ViewHolder pattern - http://www.codeofaninja.com/2013/09/androidviewholder-pattern-example.html Picasso - https://github.com/square/picasso Design Guidelines - http://developer.android.com/design/index.html Fragments - http://www.vogella.com/tutorials/androidfragments/ article.html EventBus - https://github.com/greenrobot/eventbus Slides - http://www.slideshare.net/greenrobot/eventbus-forandroid-15314813 Robospice - värt att kolla på - https://github.com/stephanenicolas/ robospice 17

Tack Frågor?