• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Android development-workshop-v2-1228043706544191-8

Android development-workshop-v2-1228043706544191-8






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Android development-workshop-v2-1228043706544191-8 Android development-workshop-v2-1228043706544191-8 Presentation Transcript

    • copyright © 2008  cod technologies ltd  www.codtech.com mobile dev camp android development workshop diego torres milano diego@codtech.com amsterdam, november 2008
    • copyright © 2008  cod technologies ltd  www.codtech.com “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 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 introduction to android ● identify unique features of  android platform ● compare android against  other platforms ● understand android building  blocks after this section you will...
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 is android linux ? ● no native windowing  system ● no glibc support ● no GNU/Linux utilities android is based on a linux kernel   but it's not GNU/Linux NO, android is not linux !
    • copyright © 2008  cod technologies ltd  www.codtech.com so is android java ? ● uses the java language ● implements part of the  Java5 SE specification ● runs on a dalvik virtual  machine instead of JVM android is not an implementation  of any of the Java variants NO, android is not java !
    • copyright © 2008  cod technologies ltd  www.codtech.com android linux kernel ● security ● memory management ● process management ● network stack ● driver model ● abstraction layer android is based on a linux 2.6 kernel, prnel, providing kernel source: source.android.com
    • copyright © 2008  cod technologies ltd  www.codtech.com linux kernel enhancements ● alarm ● ashmem ● binder ● power management ● low memory killer (no swap space available) ● logger android introduces some linux kernel patches
    • copyright © 2008  cod technologies ltd  www.codtech.com unique platform characteristics ● open source ● “all applications are equal” model ● dalvik virtual machine android characteristics not found on other platforms
    • copyright © 2008  cod technologies ltd  www.codtech.com other characteristics ● 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 interesting features as well, but they are more  common across other mobile platforms
    • copyright © 2008  cod technologies ltd  www.codtech.com android architecturecourtesy of Google
    • copyright © 2008  cod technologies ltd  www.codtech.com after this section you will... android building blocks ● recognize the fundamental  building blocks ● use these building blocks to  create applications ● understand applications  lifecycle
    • copyright © 2008  cod technologies ltd  www.codtech.com building blocks
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 Activities lifecycle rectangles are callbacks where we can implement operations performed on state changes
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 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 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 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 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 Intents ● Intents are used to move from Activity to Activity ● describes what the application wants ● provides late runtime binding primary attributes attribute description action data the general action to be performed, such as VIEW, EDIT, MAIN, etc. the data to operate on, such as a person record in the contacts database, as URI
    • copyright © 2008  cod technologies ltd  www.codtech.com intents playground http://codtech.com/android/IntentPlayground.apk
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 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 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 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 after this section you will... your first android ● 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 android project
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 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 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 run the application ● com.google.android. maps it's an optional  library not included by  default ● add <uses-library android:name="com.go ogle.android.maps" / > to manifest as  application node
    • copyright © 2008  cod technologies ltd  www.codtech.com Google Maps API key ● checking DDMS logcat we find ● 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 java.lang.IllegalArgumentException: You need to specify an API Key for each MapView. android:apiKey="0GNIO0J9wdmcNm4gCV6S0nlaFE8bHa9W XXXXXX"
    • copyright © 2008  cod technologies ltd  www.codtech.com MapActivy ● checking DDMS logcat again ● change base class to MapActivity ● fix imports ● add unimplemented methods java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 finally our map still some problems ... ● spinner is covered ● has no prompt ● externalize resource android:layout_alignPa rentTop="true" prompt: @string/prompt
    • copyright © 2008  cod technologies ltd  www.codtech.com 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 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 arrays.xml <?xml version="1.0" encoding="UTF-8"?> <resources> <!-- No support for multidimensional arrays or complex objects yet (1.0r1) --> <string-array name="location_names"> <item>Mediamatic Duintjer</item> <item>NH Hotel</item> <item>Airport</item> </string-array> <string-array name="locations"> <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 complete the class ● create the locations array ● get the views (ids pattern) ● create the adapter locations = getResources().getStringArray(R.array.locations); spinner = (Spinner) findViewById(R.id.Spinner01); mapView = (MapView) findViewById(R.id.mapview); 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 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 respond to events ● when an item is  selected map should  be centered at that  location ● invoke  goToSelectedLocation(ar g2); spinner. setOnItemSelectedListener( new OnItemSelectedListener() { });
    • copyright © 2008  cod technologies ltd  www.codtech.com goToSelectedLocation protected void goToSelectedLocation(int position) { String[] loc = locations[position].split(","); 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, "Should go to " + p); mapController.animateTo(p); mapController.setZoom(zoom); }
    • copyright © 2008  cod technologies ltd  www.codtech.com more events ● turn map clickable ● override onKeyDown android:clickable="true” 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 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 “Remember that there is no  code faster than no code” ­­ Taligent's Guide to Designing Programs
    • copyright © 2008  cod technologies ltd  www.codtech.com after this section you will... testing and performance ● 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 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 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 performance Addalocalvariable Addamembervariable CallString.length() Callemptystaticnativemethod Callemptystaticmethod Callemptyvirtualmethod Callemptyinterfacemethod CallIterator:next()onaHashMap Callput()onaHashMap Inflate1ViewfromXML Inflate1LinearLayoutwith1TextView Inflate1LinearLayoutwith6View Inflate1LinearLayoutwith6TextView Launchanemptyactivity 0 500000 1000000 1500000 2000000 2500000 3000000 Time
    • copyright © 2008  cod technologies ltd  www.codtech.com summary ● introduction to android ● android building blocks ●
    • copyright © 2008  cod technologies ltd  www.codtech.com “If things seem under control,  you're not going fast enough.” ­­ Mario Andretti
    • copyright © 2008  cod technologies ltd  www.codtech.com thank you android development workshop diego torres milano diego@codtech.com