Android Development Workshop V2

4,165 views

Published on

Android Development Workshop

Published in: Technology, News & Politics
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total views
4,165
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
427
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Android Development Workshop V2

  1. 1. mobile dev camp android development workshop amsterdam, november 2008 diego torres milano diego@codtech.com copyright © 2008  cod technologies ltd  www.codtech.com
  2. 2. “I have always wished that my  computer would be as easy to  use as my telephone. My wish has come true. I no longer know how to use my  telephone.” ­­ Bjarne Stroustrup copyright © 2008  cod technologies ltd  www.codtech.com
  3. 3. agenda introduction to android ● android architecture ● building blocks ● your first android application ● testing and performance ● best practices ● copyright © 2008  cod technologies ltd  www.codtech.com
  4. 4. introduction to android after this section you will... identify unique features of  ● android platform compare android against  ● other platforms understand android building  ● blocks copyright © 2008  cod technologies ltd  www.codtech.com
  5. 5. what is android ? android is the first complete, open  ● and free mobile platform developed by Open Handset  ● Alliance software stack than includes ● operating system – middleware – key applications – rich set of APIs – Portions of this page are reproduced from work created and  shared by Google and used according to terms described in  the Creative Commons 2.5 Attribution License. copyright © 2008  cod technologies ltd  www.codtech.com
  6. 6. is android linux ? NO, android is not linux ! android is based on a linux kernel   but it's not GNU/Linux no native windowing  ● system no glibc support ● no GNU/Linux utilities ● copyright © 2008  cod technologies ltd  www.codtech.com
  7. 7. so is android java ? NO, android is not java ! android is not an implementation  of any of the Java variants uses the java language ● implements part of the  ● Java5 SE specification runs on a dalvik virtual  ● machine instead of JVM copyright © 2008  cod technologies ltd  www.codtech.com
  8. 8. android linux kernel android is based on a linux 2.6 kernel, providing rnel, p security ● memory management ● process management ● network stack ● driver model ● abstraction layer ● kernel source: source.android.com copyright © 2008  cod technologies ltd  www.codtech.com
  9. 9. linux kernel enhancements android introduces some linux kernel patches alarm ● ashmem ● binder ● power management ● low memory killer (no swap space available) ● logger ● copyright © 2008  cod technologies ltd  www.codtech.com
  10. 10. unique platform characteristics android characteristics not found on other platforms open source ● “all applications are equal” model ● dalvik virtual machine ● copyright © 2008  cod technologies ltd  www.codtech.com
  11. 11. other characteristics interesting features as well, but they are more  common across other mobile platforms application framework enabling reuse of components ● integrated browser based on WebKit OSS engine ● 3D graphics based on the OpenGL ES ● SQLite for structured data storage ● media support for common audio, video, and still images ● camera, GPS, compass, and accelerometer ● copyright © 2008  cod technologies ltd  www.codtech.com
  12. 12. android architecture courtesy of Google copyright © 2008  cod technologies ltd  www.codtech.com
  13. 13. android building blocks after this section you will... recognize the fundamental  ● building blocks use these building blocks to  ● create applications understand applications  ● lifecycle copyright © 2008  cod technologies ltd  www.codtech.com
  14. 14. building blocks copyright © 2008  cod technologies ltd  www.codtech.com
  15. 15. Activities Activities are stacked  ● like a deck of cards only one is visible ● only one is active ● new activities are  ● placed on top copyright © 2008  cod technologies ltd  www.codtech.com
  16. 16. Activities lifecycle rectangles are callbacks where we can implement operations performed on state changes copyright © 2008  cod technologies ltd  www.codtech.com
  17. 17. Activities states active ● at the top of the stack – paused ● lost focus but still visible – can be killed by LMK – stopped ● not at the top of th stack – dropped ● killed to reclaim its memory – copyright © 2008  cod technologies ltd  www.codtech.com
  18. 18. Views Views are basic building blocks ● know how to draw themselves ● respond to events ● organized as trees to build up GUIs ● described in XML in layout resources ● copyright © 2008  cod technologies ltd  www.codtech.com
  19. 19. pattern: load layout android compiles the XML layout code that is  later loaded in code usually by public void onCreate(Bundle savedInstanceState) { ... setContentView(R.layout.filename); ... } copyright © 2008  cod technologies ltd  www.codtech.com
  20. 20. Views and Viewgroups Views and  ● Viewgroups trees  build up complex  GUIs android framework is  ● responsible for measuring – laying out – drawing – copyright © 2008  cod technologies ltd  www.codtech.com
  21. 21. pattern: ids using a unique id in a XML View definition  permits locating it later in Java code private View name; public void onCreate(Bundle savedInstanceState) { ... name = (View) findViewById(R.id.name); ... } copyright © 2008  cod technologies ltd  www.codtech.com
  22. 22. Intents Intents are used to move from Activity to Activity ● describes what the application wants ● provides late runtime binding ● primary attributes attribute description action the general action to be performed, such as VIEW, EDIT, MAIN, etc. data the data to operate on, such as a person record in the contacts database, as URI copyright © 2008  cod technologies ltd  www.codtech.com
  23. 23. intents playground http://codtech.com/android/IntentPlayground.apk copyright © 2008  cod technologies ltd  www.codtech.com
  24. 24. Services services run in the background ● don't interact with the user ● run on the main thread ● of the process is kept running as long as ● is started – has connections – copyright © 2008  cod technologies ltd  www.codtech.com
  25. 25. Notifications notify the user about  ● events sent through  ● NotificationManager types ● persistent icon – turning leds – sound or vibration – copyright © 2008  cod technologies ltd  www.codtech.com
  26. 26. ConentProviders ContentProviders are objects that can ● retrieve data – store data – data is available to all applications ● only way to share data across packages ● usually the backend is SQLite ● they are loosely linked to clients ● data exposed as a unique URI ● copyright © 2008  cod technologies ltd  www.codtech.com
  27. 27. AndroidManifest.xml control file that tells  ● the system what to do  and how the top­level  components are  related it's the “glue” that  ● actually specifies  which Intents your  Activities receive specifies permissions ● copyright © 2008  cod technologies ltd  www.codtech.com
  28. 28. your first android after this section you will... create your own android map  ● project design the UI ● externalize resources ● react to events ● run the application ● copyright © 2008  cod technologies ltd  www.codtech.com
  29. 29. android project copyright © 2008  cod technologies ltd  www.codtech.com
  30. 30. default application auto­generated  ● application template default resources ● icon – layout – strings – default  ● AndroidManifest.xml default run  ● configuration copyright © 2008  cod technologies ltd  www.codtech.com
  31. 31. designing the UI this simple UI designs  contains the window title ● a spinner (drop down  ● box) containing the  desired location over  the map a map displaying the  ● selected location copyright © 2008  cod technologies ltd  www.codtech.com
  32. 32. create the layout remove old layout ● add a RelativeLayout ● add a View (MapView not  ● supported by ADT) replace View by  ● com.google.android.m apview change id to mapview ● add a Spinner filling  ● parent width copyright © 2008  cod technologies ltd  www.codtech.com
  33. 33. run the application com.google.android. ● maps it's an optional  library not included by  default add <uses-library ● android:name=quot;com.go ogle.android.mapsquot; / > to manifest as  application node copyright © 2008  cod technologies ltd  www.codtech.com
  34. 34. Google Maps API key checking DDMS logcat we find ● java.lang.IllegalArgumentException: You need to specify an API Key for each MapView. to access Google Maps we need a key ● application must be signed with the same key ● key can be obtained from Google ● MapView should include ● android:apiKey=quot;0GNIO0J9wdmcNm4gCV6S0nlaFE8bHa9W XXXXXXquot; copyright © 2008  cod technologies ltd  www.codtech.com
  35. 35. MapActivy checking DDMS logcat again ● java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity. change base class to MapActivity ● fix imports ● add unimplemented methods ● copyright © 2008  cod technologies ltd  www.codtech.com
  36. 36. where is the map ? still no map displayed ● check DDMS logcat ● lots of IOExceptions ! ● some uses permissions  ● are missing ACCESS_COARSE_LOCATION – INTERNET – copyright © 2008  cod technologies ltd  www.codtech.com
  37. 37. finally our map still some problems ... spinner is covered ● android:layout_alignPa rentTop=quot;truequot; has no prompt ● prompt: @string/prompt externalize resource ● copyright © 2008  cod technologies ltd  www.codtech.com
  38. 38. pattern: adapters an Adapter object acts as a bridge between an  AdapterView and the underlying data for that view ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.array, android.R.layout.layout); view.setAdapter(adapter); The Adapter is also responsible for making a View for each item in the  data set. copyright © 2008  cod technologies ltd  www.codtech.com
  39. 39. pattern: resources resources are external files (that is, non­code files)  that are used by your code and compiled into your  application at build time. <resources> <string-array name=”array”> <item>item</item> </string-array> </resources> res = getResources().getType(id); copyright © 2008  cod technologies ltd  www.codtech.com
  40. 40. arrays.xml <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <resources> <!-- No support for multidimensional arrays or complex objects yet (1.0r1) --> <string-array name=quot;location_namesquot;> <item>Mediamatic Duintjer</item> <item>NH Hotel</item> <item>Airport</item> </string-array> <string-array name=quot;locationsquot;> <item>52.363125,4.892070,18</item> <item>37.244832,-115.811434,9</item> <item>-34.560047,-58.44924,16</item> </string-array> </resources> copyright © 2008  cod technologies ltd  www.codtech.com
  41. 41. complete the class create the locations array ● locations = getResources().getStringArray(R.array.locations); get the views (ids pattern) ● spinner = (Spinner) findViewById(R.id.Spinner01); mapView = (MapView) findViewById(R.id.mapview); create the adapter ● ArrayAdapter<CharSequence> adapter = ArrayAdapter. createFromResource(this, R.array.location_names, android.R.layout.simple_spinner_item); spinner.setAdapter(adapter) copyright © 2008  cod technologies ltd  www.codtech.com
  42. 42. almost there map is displayed ● spinner is displayed ● drop down is  ● displayed but there's no  ● selection button ... adapter. setDropDownViewResource( android.R.layout. simple_spinner_dropdown_item ); copyright © 2008  cod technologies ltd  www.codtech.com
  43. 43. respond to events when an item is  ● selected map should  be centered at that  location spinner. setOnItemSelectedListener( new OnItemSelectedListener() { }); invoke  ● goToSelectedLocation(ar g2); copyright © 2008  cod technologies ltd  www.codtech.com
  44. 44. goToSelectedLocation protected void goToSelectedLocation(int position) { String[] loc = locations[position].split(quot;,quot;); double lat = Double.parseDouble(loc[0]); double lon = Double.parseDouble(loc[1]); int zoom = Integer.parseInt(loc[2]); GeoPoint p = new GeoPoint((int)(lat * 1E6), (int)(lon * 1E6)); Log.d(TAG, quot;Should go to quot; + p); mapController.animateTo(p); mapController.setZoom(zoom); } copyright © 2008  cod technologies ltd  www.codtech.com
  45. 45. more events turn map clickable ● android:clickable=quot;true” override onKeyDown ● switch (keyCode) { case KeyEvent.KEYCODE_I: mapController.zoomIn(); break; case KeyEvent.KEYCODE_O: mapController.zoomOut(); break; case KeyEvent.KEYCODE_S: mapView.setSatellite( !mapView.isSatellite()); break; } copyright © 2008  cod technologies ltd  www.codtech.com
  46. 46. we did it ! Some things to try ● select a location – pan – zoom in – zoom out – toggle satellite – copyright © 2008  cod technologies ltd  www.codtech.com
  47. 47. “Remember that there is no  code faster than no code” ­­ Taligent's Guide to Designing Programs copyright © 2008  cod technologies ltd  www.codtech.com
  48. 48. testing and performance after this section you will... understand the best practices  ● to develop for android  identify the alternatives to test  ● units, services and applications performance ● copyright © 2008  cod technologies ltd  www.codtech.com
  49. 49. best practices consider performance, android is not a desktop ● avoid creating objects ● use native methods ● prefer virtual over interface ● prefer static over virtual ● avoid internal getter/setters ● declares constants final ● avoid enums ● copyright © 2008  cod technologies ltd  www.codtech.com
  50. 50. testing android sdk 1.0 introduces ● ActivityUnitTestCase to run isolated unit tests – ServiceTestCase to test services – ActivityInstrumentationTestCase to run functional  – tests of activities ApiDemos includes some test samples ● monkey, generates pseudo­random of user  ● events copyright © 2008  cod technologies ltd  www.codtech.com
  51. 51. 1000000 1500000 2000000 2500000 3000000 500000 0 Add a local variable Add a member variable Call String.length() Call empty static native method Call empty static method performance Call empty virtual method Call empty interface method Call Iterator:next() on a HashMap Call put() on a HashMap Inflate 1 View from XML Inflate 1 LinearLayout with 1 TextView copyright © 2008  cod technologies ltd  www.codtech.com Inflate 1 LinearLayout with 6 View Inflate 1 LinearLayout with 6 TextView Launch an empty activity Time
  52. 52. “If things seem under control,  you're not going fast enough.” ­­ Mario Andretti copyright © 2008  cod technologies ltd  www.codtech.com
  53. 53. thank you android development workshop diego torres milano diego@codtech.com copyright © 2008  cod technologies ltd  www.codtech.com

×