91
Jumpstart to Android App development Lars Vogel Lars Vogel http://www.vogella.de Twitter: @vogella

Android Jumpstart Jfokus

Embed Size (px)

DESCRIPTION

Presentation at Jfokus about And

Citation preview

Page 1: Android Jumpstart Jfokus

Jumpstart to Android App development

Lars VogelLars Vogelhttp://www.vogella.de

Twitter: @vogella

Page 2: Android Jumpstart Jfokus

What is Android?

Fundamentals

Constructs of Android

Live Coding

Q&A

Page 3: Android Jumpstart Jfokus

Independent Eclipse and Android consultant, trainer and book author

Eclipse committer

Maintains http://www.vogella.de Java, Eclipse and Android related Tutorials with more then a million visitors per month.

About me – Lars Vogel

Page 4: Android Jumpstart Jfokus

Wednesday, 11.10 -12.00 - So whats so cool about Android 4.x

Thuersday – Friday – Full day Android training

More Android Sessions:

Page 5: Android Jumpstart Jfokus

Android Experience?

Page 6: Android Jumpstart Jfokus

What is Android?

Page 7: Android Jumpstart Jfokus

- Open Source- Full stack based on Linux- Java programming interface- Project is lead by Google- Tooling available for Eclipse (and other IDE's)

Android from 10 000 feet

Page 8: Android Jumpstart Jfokus
Page 9: Android Jumpstart Jfokus

On Android you develop in Java

(There is also the NDK which allows development in C / C++...)

Page 10: Android Jumpstart Jfokus

Rich UI components

Threads and Background Processing

Full network stack (Http, JSON)

Database available

Images

Access to the hardware (GPS, Camera, Phone)

and much more............

Overview of the API Capabilities

Page 11: Android Jumpstart Jfokus

Its like programming for hardware which is 10 years old

Page 12: Android Jumpstart Jfokus

… with insame performance

requirements

Page 13: Android Jumpstart Jfokus

On Android you develop in Java

Really?

Page 14: Android Jumpstart Jfokus

You use the Java programming language but Android does not run Java Bytecode

Android Programming

Page 15: Android Jumpstart Jfokus

Dalvik

Run Dalvik Executable Code (.dex)Tool dx converts Java Bytecode into .dex

• Register based VM vrs. stack based as the JVM• .dex Files contain more then one class• Approx. 50 % of the size of a class file• op codes are two bytes instead of one in the JVM• As of Android 2.2 Dalvik JIT compiler• Primary engineer: Dan Bornstein

Page 16: Android Jumpstart Jfokus

Developer Toolchain

Page 17: Android Jumpstart Jfokus

Android Development Tools (ADT) for Eclipse

Eclipse based tooling

• Provide the emulator• Wizard for creating new project• Additional Tooling, e.g views

Page 18: Android Jumpstart Jfokus

QEMU-based ARM emulator runs same image as a device

Use same toolchain to work with device or emulator

Inital startup is slooooowwwwww.....

Emulator

Page 19: Android Jumpstart Jfokus

Demo

Page 20: Android Jumpstart Jfokus

AndroidManifest.xml

•General configuration files for your application

•Contains all component definitions of your appication

Page 21: Android Jumpstart Jfokus

Resources from /res are automatically „indexed“

Page 22: Android Jumpstart Jfokus

ADT maintains a reference to all resources in the R.java

Page 23: Android Jumpstart Jfokus

Main Android programming constructs

Activity

Broadcast Receiver

Intents

Services

ContentProvider

Views

Page 24: Android Jumpstart Jfokus

Context

Page 25: Android Jumpstart Jfokus

Global information about an application environment.

Allows access to application-specific resources and classes

Support application-level operations such as launching activities, broadcasting and receiving intents, etc.

Basically all Android classes need a context

Activity extends Context

Context

Page 26: Android Jumpstart Jfokus

DemoYour first projectActivities

Page 27: Android Jumpstart Jfokus

Extends Context

An activity is a single, focused thing that the user can do.

Kind of a screen but not entirely...

Activity

Page 28: Android Jumpstart Jfokus

android.viewView: UI Widget - Button - TextView - EditText

View vrs ViewGroup

Page 29: Android Jumpstart Jfokus

Layouts

android.view.ViewGroup - Layout - extends View• Layouts are typically defined via XML files (resources)

• You can assign properties to the layout elements to influence their behavior.

Page 30: Android Jumpstart Jfokus

Demo – Hello JFokus

Page 31: Android Jumpstart Jfokus

Andoid is allowed to kill your app to save memory.

Page 32: Android Jumpstart Jfokus

Life Cyle of an Activity

void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()

Android may destroy you!

Page 33: Android Jumpstart Jfokus

States of an Activity

• Active/ Running – Visible and interacts with user• Paused – still visible but partically obscured (other

transparant activity, dialog or the phone screen), instance is running but might be killed by the system

• Stopped – completely obscured, e.g. User presses the home screen button, instance is running but might be killed by the system

• Killed – if stopped or paused, system might calling finish or by killing it

Page 34: Android Jumpstart Jfokus
Page 35: Android Jumpstart Jfokus

To test flip your device

Page 36: Android Jumpstart Jfokus

Defining Activities

Page 37: Android Jumpstart Jfokus

Calling Activities creates a stack -> Back button goes back to the previous activity

-> Think of it as a stack of cards

Calling Activities

Page 38: Android Jumpstart Jfokus

Defining Activities

• Create a class which extends „Activitiy“

• Create an entry in „AndroidManifest.xml“ for the activity.

• <activity android:name=“MyNewActivity“></activity>

Page 39: Android Jumpstart Jfokus

I had only the best intents....

Page 40: Android Jumpstart Jfokus

Message passing mechanism to start Activities, Services or to trigger (system) events.

Allow modular architecture

Can contain data (extra)

Intents

Page 41: Android Jumpstart Jfokus

Intents

• Explicit: Asking someone to do something• Implicit: Asking the system who can do something

Intent

Page 42: Android Jumpstart Jfokus

Demo Intents

Page 43: Android Jumpstart Jfokus

Implicit Intents

• new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.vogella.de"));

• new Intent(Intent.ACTION_CALL, Uri.parse("tel:(+49)12345789"));

• new Intent(Intent.ACTION_VIEW, Uri.parse("geo:50.123,7.1434?z=19"));

• new Intent("android.media.action.IMAGE_CAPTURE");

Page 44: Android Jumpstart Jfokus

Gettings results

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(intent, 0);

public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == 0) { String result = data.toURI(); Toast.makeText(this, result, Toast.LENGTH_LONG); }}

Page 45: Android Jumpstart Jfokus

XML Drawables

Page 46: Android Jumpstart Jfokus

XML Drawables

• XML Resources • Can be used to define transitions, shapes or stateA drawable resource is something that can be drawn to the screen

Page 47: Android Jumpstart Jfokus

Services and receiver

Page 48: Android Jumpstart Jfokus

Allow real multitasking and background processing

De-coupled from the Activity life-cyle

Services

Page 49: Android Jumpstart Jfokus

Services

Service runs in the background without interacting with the user.

Android provides a multitude of system services

• NotificationService• VibratorService• LocationService• AlarmService• ....

Access via context.getSystemService(Context.CONST);

You can define your own service for things that should run in the background

Page 50: Android Jumpstart Jfokus

Notification Manager

Demo

Page 51: Android Jumpstart Jfokus

Services

Service runs in the background without interacting with the user.

Android provides a multitude of system services

• NotificationService• VibratorService• LocationService• AlarmService• ....

Access via context.getSystemService(Context.CONST);

You can define your own service for things that should run in the background

Page 52: Android Jumpstart Jfokus

Broadcast Receiver – Listen to events

Example: BATTERY_LOW, ACTION_BOOT_COMPLETEDandroid.intent.action.PHONE_STATE

Defined statically in manifest or temporary via code

Broadcast Receiver only works within the onReceive() method

C2DM

Page 53: Android Jumpstart Jfokus

Own Service

• Extend Service or IntentService• start with startService(Intent) or

bindService(Intent).• onStartCommand is called in the service• bindService gets a ServiceConnection as

parameter which receives a Binder object which can be used to communicate with the service

Page 54: Android Jumpstart Jfokus

How to start a service

Broadcast Receiver – Event: BOOT_COMPLETED Or

ACTION_EXTERNAL_APPLICATIONS_AVAILABLE

startService in the onReceiveMethod()

Timer ServiceStart BroadcastReceiver which starts the

service

Page 55: Android Jumpstart Jfokus

Demo

alarmreceiver.phone

Page 56: Android Jumpstart Jfokus

Security

Page 57: Android Jumpstart Jfokus

Each apps gets into own Linux user and runs in its own process

Page 58: Android Jumpstart Jfokus

Android Application requires explicit permissions, e.g. for • DB access• Phone access• Contacts • Internet• System messages

Page 59: Android Jumpstart Jfokus

Background Processing

Page 60: Android Jumpstart Jfokus

Be fast!

Avoid ApplicationNotResponding Error

Page 61: Android Jumpstart Jfokus

Use Threads (not the UI one)

• Long running stuff should run in the background

• Thread cannot modify the UI• Synch with the UI thread

runOnUiThread(new Runnable)

Page 62: Android Jumpstart Jfokus

Handler and AsyncTask

• Handler runs in the UI thread• Allows to send Message object and or

to send Runnable to it handler.sendMessage(msg)

handler.post(runnable)

• AsyncTask for more complex work

Page 63: Android Jumpstart Jfokus

AsyncTask

• To use it subclass it

AsyncTask <TypeOfVarArgParams , ProgressValue , ResultValue>

doInBackground() – Do the work

onPostExecute() – Update the UI

Page 64: Android Jumpstart Jfokus

Saving the thread

• If a thread runs in your Activity you want to save it.

Page 65: Android Jumpstart Jfokus

Lifecycle - Thread

• If Activity is destroyed the Threads should be preserved.

• Close down Dialogs in the onDestroy() method

• One object can be saved via onRetainConConfigurationInstance()

• Access via getLastNonConfigurationInstance()

• Only use static inner classes in your Threads otherwise you create a memory leakage.

Page 66: Android Jumpstart Jfokus

Option Menus and Action Bar

Page 67: Android Jumpstart Jfokus

Option Menu & Action Bar

• Option Menu displays if „Menu“ button is pressed

• You can decided if the entries are displayed in the Action Bar or in a menu

• Use „ifRoom“ flag if possible.

Page 68: Android Jumpstart Jfokus

Option Menu & Action Bar

• Option Menu displays if „Menu“ button is pressed

• You can decided if the entries are displayed in the Action Bar or in a menu

• Use „ifRoom“ flag if possible.

Page 69: Android Jumpstart Jfokus

Preferences

Page 70: Android Jumpstart Jfokus

Read and Write Preferences

• Key – Value pairs

• PreferenceManager.getDefaultSharedPreferences(this); –To read: getString(key), get...–To change use edit(), putType(key, value), commit()

• To maintain use PreferenceActivity

Page 71: Android Jumpstart Jfokus

PreferenceActivity

• Create resource file (preference)• New Activity which extends PreferenceActivity

• To add preferences:–addPreferencesFromResource(R.xml.preferences);

• Saving and edits will be handled automatically by the PreferenceActivity

Page 72: Android Jumpstart Jfokus

ListView

Page 73: Android Jumpstart Jfokus

Can be used to display a list of items

Gets his data from an adapter

ListView

Page 74: Android Jumpstart Jfokus

Adapter

View per row defined by Adapter

Data for ListView defined by Adapter

Page 75: Android Jumpstart Jfokus

ListActivity has already a predefined ListView with the id @android:id/list which will be used automatically.

Provides nice method hooks for typical operations on lists

If you define your own layout this layout must contain a ListView with the ID:

@+android:id/list

ListActivity

Page 76: Android Jumpstart Jfokus

What if the layout should not be static?

Page 77: Android Jumpstart Jfokus

Define your own Adapter

Page 78: Android Jumpstart Jfokus

If convertView is not null -> reuse it

Saves memory and CPU power (approx. 150 % faster according to Google IO)

Holder Pattern saves 25%

Reuse existing rows

Page 79: Android Jumpstart Jfokus

Views and Touch

Page 80: Android Jumpstart Jfokus

There is more....

Page 81: Android Jumpstart Jfokus

Camera APIMotion DetectionLocation API (GIS)Heat SensorAccelerator

I have feelings

Page 82: Android Jumpstart Jfokus

Example Camera API

Page 83: Android Jumpstart Jfokus

Internet (java.net, Apache HttpClient, JSON...)BluetoothEmailSMSVoIP (SIP (Session Initiation Protocol))

I can talk and hear

Page 84: Android Jumpstart Jfokus

Other Capabilities

Push to device

Interactive Widgets on the homescreen

Live Wallpapers (as background)

Animations and Styling

Simple List handling

(Multi-) Touch

NFC

Canvas / OpenGL ES (Game programming....)

Native Rendering

Page 85: Android Jumpstart Jfokus

Android 4.0

Page 86: Android Jumpstart Jfokus

Whats so cool about Android 4.0?

• Come to my talk on Wednesday... ;-)

Page 87: Android Jumpstart Jfokus

Summary

Android powerful and well-designed development

platform

Easy to get started

Power to the developer

Page 88: Android Jumpstart Jfokus
Page 89: Android Jumpstart Jfokus

Android: Where to go from here:

Android Introduction Tutorial http://www.vogella.de/articles/Android/article.html

Or Google for „Android Development Tutorial“

Android SQLite and ContentProvider Bookhttp://www.amazon.com/dp/B006YUWEFE

More on Android http://www.vogella.de/android.html

Page 90: Android Jumpstart Jfokus

Thank you

For further questions:

[email protected]://www.vogella.deTwitter http://www.twitter.com/vogellaGoogle+ http://gplus.to/vogella

Page 91: Android Jumpstart Jfokus

License & Acknowledgements

• This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License

– See http://creativecommons.org/licenses/by-nc-nd/3.0/de/deed.en_US