Multithreading in Android
Ahsen Tahir
Talk Outline
Android Overview Android Stack
Android Development Tools
Main Building Blocks (Activity Life Cycle) Threading in Android Multithreading via AsyncTask Class Multithreading via Handler -> MessagePassing &
Post() method
Android Overview
Awesome Ingredients:
Open Source Platform Apache/MIT License Third party libraries rewritten Designed for Mobile Devices Limited Memory, Battery & Speed Comprehensive platform
Semiconductor Manufacturers
OHA
Mobile Operators Software Development
Android is owned by Open Handset Alliance (OHA).
Android Stack Layers
Linux Kernel Native Libraries Dalvik Runtime Application Framework
Android Stack Layers
Linux kernel layer
Why linux kernel? Portability Security Features Linux kernel 2.6.39 kernel enhancements Drivers, Pluggable modules, Power management, IPC
Android Stack Layers
Native Libraries
Function Libraries
Webkit, Media framework, SQLite
Optimized for embedded use: libc
Bionic Libs
Native Servers
Surface flinger(manager),Audio flinger
Hardware Abstraction Libraries (HAL)
Android Stack Layers
Android RunTime
Core Libraries
Mostly Java SE (No AWT & Swing) More features
Low memory, slow cpu, no swap space
Java Source Code
Java
Compiler
Java Source Code
Java Compiler
Dalvik VM
Java Byte Code
Java Byte Code
Dex Compiler
Execution
Dalvik Byte Code
Execution
Java VM
Dalvik VM
Android Stack Layers
Application Framework
Java Libraries Built for Android
Services (Managers)
Android Development
Development requirements Android SDK
[Link]
Eclipse IDE for Java Developers
[Link]
Android Development Plugin
[Link]
Android Development
IDE & Tools Android SDK
Class Library Emulator and System Images Documentation and Sample Code Developer Tools
dx Dalvik Cross-Assembler aapt Android Asset Packaging Tool adb Android Debug Bridge ddms Dalvik Debug Monitor Service
Eclipse IDE + ADT plugin
UI creation easier, reduces development time
Android Development
Programming Languages Java C/C++ (Restricted official support)
[Link]
Android Activity Life Cycle
Activity -> GUI/Window on screen Activity Life Cycle
Threading in Android
A Thread is a concurrent unit of execution.
A thread has its own call stack for methods being
invoked, their arguments and local variables. Each virtual machine instance has at least one main Thread running when it is started; typically, there are several others for housekeeping. The application might decide to launch additional Threads for specific.
Threading in Android
Threads in the same VM interact and synchronize
by the use of shared objects and monitors associated with these objects. There are basically two main ways of having a Thread execute application code.
One is providing a new class that extends Thread and overriding its run() method. The other is providing a new Thread instance with a Runnable object during its creation.
In both cases, the start() method must be called
to actually execute the new Thread.
Threading in Android
Threads share the process' resources but are able
to execute independently. Applications responsibilities can be separated
main thread runs UI, and slow tasks are sent to background threads.
Particularly useful in the case of a single process
that spawns multiple threads on top of a multiprocessor system. In this case real parallelism is achieved. Consequently, a multithreaded program operates faster on computer systems that have multiple CPUs.
Multithreading Via AsycTask
Using the AsyncTask Class
AsyncTask enables proper and easy use of the UI thread.
This class allows to perform background operations and
publish results on the UI thread without having to manipulate threads and/or handlers. An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined
Multithreading in Android
Using the AsyncTask Class
Multithreading Via Handler
Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue Each Handler instance is associated with a single thread and that thread's message queue
(1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own.
Post(Runnable) & sendMessage(Message)
Thanks