Android Ecosystem and What’s Ne · Android NDK app Android manifest resource bundle Dalvik...

Preview:

Citation preview

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 Advocatetwbray@google.com android-developers.blogspot.com @AndroidDev

Wednesday, November 24, 2010

Recommended