Post on 17-May-2015
description
transcript
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