Revised v4PresenterAndroid Ecosystem and What’s New
Wednesday, November 24, 2010
Why Mobile?
Wednesday, November 24, 2010
1B
2B
3B
4B
5B
Landlines PCs TVs Bank users Mobiles
Wednesday, November 24, 2010
45M
90M
135M
180M
225M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Quarters since launch
AOL
Wednesday, November 24, 2010
45M
90M
135M
180M
225M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Quarters since launch
AOL i-mode
Wednesday, November 24, 2010
45M
90M
135M
180M
225M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Quarters since launch
AOL i-mode Netscape
Wednesday, November 24, 2010
45M
90M
135M
180M
225M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Quarters since launch
AOL i-mode NetscapeiOS
Wednesday, November 24, 2010
45M
90M
135M
180M
225M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Quarters since launch
AOL i-mode NetscapeiOS Android
Data from Asymco: asymco.com
Wednesday, November 24, 2010
0
50,000
100,000
150,000
200,000
Feb May Jun Aug Today
New activations per day
Wednesday, November 24, 2010
0
25,000
50,000
75,000
100,000
Feb May Jun Aug Today
Apps in Android Market
Wednesday, November 24, 2010
90 devices21 manufacturers
50 carriers49 countries
Wednesday, November 24, 2010
Android: What’s InsideDalvik virtual machine
Native code
Linux kernel, Android extensions
Harmonylibraries
Android appframework
JNI
Android SDKapps
Android
NDKapps
Wednesday, November 24, 2010
Android: What’s InsideAndroid app framework
ActivityManager
WindowManager
Content Providers
ViewSystem
PackageManager
TelephonyManager
ResourceManager
LocationManager
NotificationManager
OpenGLES
FreeType
WebKit
MediaFramework
SSL
SurfaceManager
SGL
SQLite
libc
... ...
Wednesday, November 24, 2010
Android: What’s InsideAndroid SDK app
Android manifest
resourcebundle
Dalvik classes
• Currently, Dalvik classes are produced by compiling & translating code written in the Java language
• Excellent toolchain support
• Community work is under way on enabling other languages to be first class Android citizens
Wednesday, November 24, 2010
Android NDK appAndroid manifest
resourcebundle
Dalvik classes
libraries& JNI
Android: What’s Inside• This is mostly done by
game developers
• Pretty well all C/C++ code
• Relatively manual toolchain support
Wednesday, November 24, 2010
How a Developer Works1. Download SDK manager from developer.android.com
and use it to install SDK versions.
2. Use the Eclipse plug-in, or just build with ant, or program in C/C++ using the NDK.
3. Use tools like ddms and logcat and traceview.
4. Download system source from source.android.com, use it for reference.
5. Register as a developer for US$25.
6. Upload your app to Android Market.
7. There is no Step 7!
Wednesday, November 24, 2010
What a Developer sees• Activities: Something that’s happening on the screen
• Services: Something important in the background
• Intents: For launching other Activities & Services
• Broadcast Receivers: Quickly respond to an event
• Threads and processes: Familiar Linux model
• Content Providers: Interprocess database wrappers
• Manifest: Declaring your app to the world
• Hardware APIs: Location, Camera, Microphone, Video, Accelerometer, and more
Wednesday, November 24, 2010
Activity• Contains the visual user interface
• Focused on one endeavor
• More than one per application
• One Activity is marked for launch
• Current Activity can starts the next
• Extends Activity base class
Wednesday, November 24, 2010
Activity Example
Wednesday, November 24, 2010
Activity Lifecycle• 3 states: active, paused and stopped
• System can kill if paused or stopped
• Managed by 7 protected methods
• Realizing 3 nested “lifetime” loops
• Entire Lifetime
• Visible Lifetime
• Foreground Lifetime
Wednesday, November 24, 2010
Activity LifecycleonCreate()
onStart() onRestart()
onResume()
onPause()
onStop()
onDestroy()
RUNNING
SHUTDOWN
Visible Lifetime
Foreground Lifetime
EntireLifetime
Wednesday, November 24, 2010
Service• Does not have a visual user interface
• Runs in the background
• System attempts to keep it alive
• Communicate through exposed Interface
• Run in the main thread of application
• Spawn another thread to avoid blocking
• Extends Service base class
Wednesday, November 24, 2010
Service Example
Wednesday, November 24, 2010
Service Lifecycle• 2 states: active and stopped
• Runs in foreground
• Not likely to be killed, but possible
• Managed by 3 public methods
Wednesday, November 24, 2010
Service Lifecycle
onCreate()
onStart()
onDestroy()
RUNNING
SHUTDOWN
ActiveLifetime
EntireLifetime
Wednesday, November 24, 2010
Intents• Has an optional target, an action, a Mime type,
and a category, with optional extra data
• Launch a specific Activity or Service via target
• Omit the target and the system will find the Activity or Service to start
• Activities, Services, and BroadcastReceivers register IntentFilters to say they can handle particular Intents
• How everything in Android is tied together
Wednesday, November 24, 2010
Intents
Back button
Intent launch
Wednesday, November 24, 2010
Intent
Wednesday, November 24, 2010
Broadcast Receiver• Does not have a visual user interface
• Runs in the background
• Reacts to broadcast system messages
• Example: battery charge status
• Extends BroadcastReceiver base class
• Has to complete and exit fast
Wednesday, November 24, 2010
Broadcast Receiver Example
Wednesday, November 24, 2010
Broadcast Receiver Lifecycle• 1 state: active
• Runs in background...
• ... but not for long!
• Not likely to be killed, but possible
• Managed by 1 public method
Wednesday, November 24, 2010
Broadcast Receiver Lifecycle
onReceive()
RUNNING
DONE
ActiveLifetime
Wednesday, November 24, 2010
Content Providers• Makes data available to other apps
• Typically backed by file system or SQLite
• Extends ContentProvider base class
• Examples: Contacts, Phone log, Media files, and more
Wednesday, November 24, 2010
Content Providers
ContentProvider
Wednesday, November 24, 2010
Threading• Semantics are like java.lang.thread
• There’s one “special” thread that owns the UI.
• You have to arrange to do any real work on another thread, to keep things from bogging down.
• Shared mutable state... be careful! Lots of potential for deadlocks and race conditions.
Wednesday, November 24, 2010
Threading private Handler mHandler = new Handler(); // class variable
protected void onCreate(Bundle mumble) { // in UI thread sCallProgress = (ProgressBar) findViewById(R.id.sCallProgress); new Thread(new CopyIn()).start(); // ...
class CopyIn implements Runnable { public void run() { while (calls.moveToNext()) { // in background thread print.println(call.cursorToJSON(calls)); savedCalls += 1; sCallProgress.setProgress((int) (savedCalls / denominator)); } mHandler.post(new Runnable() { // send this to UI thread String msg = getString(R.string.saved) + " " + savedCalls + " " + getString(R.string.calls) + "."; public void run() { cpLabel.setText(msg); } });
Wednesday, November 24, 2010
Android Manifest• XML file that declares app components:
Activities, Services, Intent Filters, Broadcast Receivers
• Names any libraries to be included
• Identifies permissions needed
• Identifies hardware required
• Identifies framework versions
Wednesday, November 24, 2010
Other bits & pieces• APIs for all the hardware and sensors; location
services
• System intents for telephony and SMS and Maps and so on
• XML subsystem for doing layouts in multiple resolutions and form factors
• XML subsystem for encoding strings with bilt-in i18n
• Utilities for IPC
• ... and much more.
Wednesday, November 24, 2010
Android Releases
Oct ’09: Eclair
May ’10: Froyo
Apr ’09: Cupcake Sep ’09: Donut
Wednesday, November 24, 2010
Android Releases
Wednesday, November 24, 2010
Android Directions• Performance, performance performance
• New form factors
• Framework improvements
• More languages
Wednesday, November 24, 2010
Android Market Directions• On the Web
• Bigger
• Easier to search
• Easier to buy
• Easier to track
Wednesday, November 24, 2010
Why I chose Android• Open source (GPL + Apache 2)
• Low-friction market and side-loading
• Low barrier to entry; java today, more languages tomorrow
• Straightforward API, light on abstraction
• Nice clean unboxed Intent/Activity/Service architecture, with a back button
• Almost nothing hidden
Wednesday, November 24, 2010
Thank you!feedback: bit.ly/mgddbrTim Bray, Developer [email protected] android-developers.blogspot.com @AndroidDev
Wednesday, November 24, 2010