====== Programming Mobile Services for Android Handheld Systems: Concurrency ====== Course page: https://class.coursera.org/posaconcurrency-001\\ By Dr. Douglas C. Schmidt, Université Vanderbilt ===== Section 0 ===== ==== MOOC Introduction ==== ==== MOOC Organization and Topics ==== ==== Concurrency Motivations ==== * To simplify Program Structure * To increase performances (renderscript ?) * Improve Responsiveness ==== Concurrency Challenges ==== * Accidental complexities * using low level API: * error-prone * type casts * quasi-typed thread handles * non-portable * How to debug ? * Heisenbug: debugger changing execution sequence and times * Need Static/dynamic analysis to detect race conditions. * Inherent complexities: * synchronization * scheduling * deadlock ==== Overview of Patterns and Frameworks ==== * Patterns provide guide and architecture * Frameworks overview: * inversion of control (owns the app event loop) * provide integrated domain specific structures * semi-complete applications * Android frameworks: * Hammer framework * Gang of four: * Template method * Strategy method * Factory method ===== Week 1 ===== ==== Overview of Android Layers ==== * Android provides layered stack for mobile devices. * more flexible system. * Layers: - Hardware (CPU, storage, wifi, sensors, etc) - Variant of Linux OS (power management) - Middleware infrastructure - Hardware abstraction layer - Java runtime environment - Optimized Jva virtual machine (Dalvik or ART) - subset of core java libraries - C/C++ libraries - Middleware frameworks - GUI - Telephonu - Camera - Multimedia - Packaged apps. * Overview of the android linux kernel * Provides: * Virtual memory * Processes * Thread management * network and inter process communitation stack * device drivers (touch screen, USB, bluetooth) * android specific optimization * cf. Binder (IPC) Driver * Shared memory driver * Power management (=> wakelocks) * Low memory killer (oom_handling) * Overview of the android Hardware Abstraction Layer * runs in user space * defines the interface that the hardware drivers should implement * Separate concerns: * android platform logic / hardware * User space because: * radio interface was not standardized. * intellectual properties: no GPL needed for user space. * Overview of the Android Runtime: Java virtual machine * support concurrent execution of java apps * Virtual machine: * **managed** runtime platform * created/destroyed with process (cf. "zygote") * Android app runs on its own process with its VM. * Not using standard Java VM, instead Dalvik VM. * Dalvik is a "register machine" * Dalvik being replaced by ART. * ART uses "ahead-of-time" compiler + better garbage collection. * VMs implement java's concurrency features. * Overview of the Android Runtime: Core Java Libraries * Core java classes: java.*, javax.* (some missing!) * Threads in process can communicate with shared objects or message passing. * Threads in different processes will use IPC for communication. * Each thread as specific info & common process shared info. * Overview of the Android Runtime: * android.* * Concurrency frameworks: * Handlers, Messages and Runnables (HaMeR) * AsyncTask: (cf. executeOnExecutioner) * Services framework * Overview of the Android Native C/C++ Libraries: * JNI * Android NDK: write C++ apps/perform additional optimization. * Overview of the Android Application Framework: