Android Jumpstart Jfokus

Post on 17-May-2015

2.619 views 5 download

Tags:

description

Presentation at Jfokus about And

Transcript of Android Jumpstart Jfokus

Jumpstart to Android App development

Lars VogelLars Vogelhttp://www.vogella.de

Twitter: @vogella

What is Android?

Fundamentals

Constructs of Android

Live Coding

Q&A

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

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

Thuersday – Friday – Full day Android training

More Android Sessions:

Android Experience?

What is Android?

- 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

On Android you develop in Java

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

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

Its like programming for hardware which is 10 years old

… with insame performance

requirements

On Android you develop in Java

Really?

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

Android Programming

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

Developer Toolchain

Android Development Tools (ADT) for Eclipse

Eclipse based tooling

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

QEMU-based ARM emulator runs same image as a device

Use same toolchain to work with device or emulator

Inital startup is slooooowwwwww.....

Emulator

Demo

AndroidManifest.xml

•General configuration files for your application

•Contains all component definitions of your appication

Resources from /res are automatically „indexed“

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

Main Android programming constructs

Activity

Broadcast Receiver

Intents

Services

ContentProvider

Views

Context

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

DemoYour first projectActivities

Extends Context

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

Kind of a screen but not entirely...

Activity

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

View vrs ViewGroup

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.

Demo – Hello JFokus

Andoid is allowed to kill your app to save memory.

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!

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

To test flip your device

Defining Activities

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

-> Think of it as a stack of cards

Calling Activities

Defining Activities

• Create a class which extends „Activitiy“

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

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

I had only the best intents....

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

Allow modular architecture

Can contain data (extra)

Intents

Intents

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

Intent

Demo Intents

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");

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); }}

XML Drawables

XML Drawables

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

Services and receiver

Allow real multitasking and background processing

De-coupled from the Activity life-cyle

Services

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

Notification Manager

Demo

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

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

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

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

Demo

alarmreceiver.phone

Security

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

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

Background Processing

Be fast!

Avoid ApplicationNotResponding Error

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)

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

AsyncTask

• To use it subclass it

AsyncTask <TypeOfVarArgParams , ProgressValue , ResultValue>

doInBackground() – Do the work

onPostExecute() – Update the UI

Saving the thread

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

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.

Option Menus and Action Bar

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.

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.

Preferences

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

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

ListView

Can be used to display a list of items

Gets his data from an adapter

ListView

Adapter

View per row defined by Adapter

Data for ListView defined by Adapter

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

What if the layout should not be static?

Define your own Adapter

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

Views and Touch

There is more....

Camera APIMotion DetectionLocation API (GIS)Heat SensorAccelerator

I have feelings

Example Camera API

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

I can talk and hear

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

Android 4.0

Whats so cool about Android 4.0?

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

Summary

Android powerful and well-designed development

platform

Easy to get started

Power to the developer

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

Thank you

For further questions:

Lars.Vogel@gmail.comhttp://www.vogella.deTwitter http://www.twitter.com/vogellaGoogle+ http://gplus.to/vogella

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