Preparing video…

Programming Mobile Services for Android Handheld Systems: Concurrency

Part of the Mobile Cloud Computing with Android Specialization »

In this MOOC, we will learn how to apply patterns and frameworks to alleviate the complexity of developing concurrent applications on mobile devices running Android that connect to popular cloud computing platforms.


Course at a Glance

About the Course

This MOOC describes by example how to apply patterns and frameworks to alleviate the complexity of developing concurrent software for mobile devices via the use of object-oriented design techniques. A pattern describes a reusable solution to a common problem that arises within a particular context. A framework is an integrated set of components that collaborate to provide a reusable architecture for a family of related apps or services.  Frameworks can also be viewed as concrete realizations of patterns that facilitate direct reuse of detailed design and source code.

This MOOC will cover Android's Handlers, Messages, and Runnables (HaMeR) framework and its AsyncTask framework, which simplify the development of Android applications that can run long-duration operations in background threads and then publish the results of these operations to the User Interface thread, which then performs short-duration user-facing operations.  Some coverage of Java threads will be included to provide background on concurrent programming. Hands-on programming projects will require students to apply these two concurrency frameworks to representative Android applications.

The Mobile Cloud Computing with Android (MoCCA) Specialization

This is the third course of the six-course Mobile Cloud Computing with Android (MoCCA) Specialization. It has been designed as part of a Coursera Specialization designed to help learners create complex, cloud-based Android Applications, and includes a final “capstone” project for those who earn Verified Certificates across all six courses.

Note: We are proud to announce that the MoCCA specialization has already reached hundreds of thousands of learners around the globe. In its last iteration, we worked with Google to provide Nexus tablets, feedback from the Google App team, and the potential to be featured in the Google Play store to top course completers.

This time around, we are providing more flexibility for all of you busy learners. We are running the Programming Mobile Applications courses in more digestible one-month-long sections, each with a meaningful mini-project at the end. Additionally, we will be re-offering the courses more frequently. For example, new sessions of my two introductory courses will be launched on a monthly basis, so that you can find a convenient time to join us or pick up where you left off if you didn’t quite finish before.

For previous MoCCA students: If you have already earned a Verified Certificate in the previous version of this course, "Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems” offered in May 2014, you do not need to retake this course to continue towards the Specialization certificate and final project in 2015. Please consult the Specializations Help Center or contact the Coursera support team if you are not sure whether you qualify.

This MOOC and six others, taught by Dr. Adam Porter from the University of Maryland and Dr. Jules White from Vanderbilt University, have been designed to complement each other as part of the first trans-institution sequence of MOOCs taught on the Coursera platform, structured as follows:

  • The first two MOOCs by Dr. Adam Porter, of the University of Maryland, are Programming Mobile Applications for Android Handheld Systems Part 1 and Part 2. They focus on the design and programming of user-facing applications.  

  • The third, fourth. and fifth MOOCs by Dr. Douglas Schmidt, of Vanderbilt University, are Programming Mobile Services for Android Handheld Systems: Concurrency, Communication, and Content. They focus on middleware systems programming topics, such as synchronous and asynchronous concurrency models, background service processing, structured data management, local inter-process communication and networking, and integration with cloud-based services.  

  • The sixth and seventh MOOCs by Dr. Jules White, of Vanderbilt University, are Programming Cloud Services for Android Handheld Systems: Spring and Security.  They focus on how to connect Android mobile devices to cloud computing and data storage resources, essentially turning a device into an extension of powerful cloud-based services on popular cloud computing platforms, such as Google App Engine and Amazon EC2.

  • The final “capstone” project will require students to develop a complex mobile cloud computing application from the ground up.

Some of the programming assignments for these MOOCs will be coordinated.  

If you just want to take some of the MOOCs in this sequence or take them all in different order you’re certainly welcome to do so, and you’ll still learn a lot. However, if you take all the MOOCs in this sequence in the order presented you’ll gain a deeper, end-to-end understanding of handheld systems, their applications and services, as well as their integration into the cloud.

Course Syllabus

This MOOC is organized into the following sections (all of which contain a mixture of pre-recorded videos and all of which are subject to change):

  • Section 0: Course Introduction
    • Part 1: Course Organization and Topics
    • Part 2: Course Prerequisites, Workload, and Learning Strategies
    • Part 3: Concurrency Motivations
    • Part 4: Concurrency Challenges 
    • Part 5: Overview of Patterns and Frameworks 
    • Part 6: Overview of Android Layers
  • Section 1: Overview of Concurrency for Android and Java
    • Part 1: Java Threading Mechanisms
    • Part 2: Java Built-in Synchronization Mechanisms
    • Part 3: Java Semaphores
    • Section 2: Android Concurrency Frameworks: Programming
      • Part 1: Overview of Android Concurrency Framework Classes
      • Part 2: Overview of the Threaded Downloads Application
      • Part 3: Overview of  Handlers, Messages, and Runnables (HaMeR) Framework
      • Part 4: Overview of the AsyncTask Framework
      • Part 5: Evaluating Android Concurrency Frameworks
    • Section 3: Android Concurrency Frameworks: Internals
      • Part 1:  Android Looper
      • Part 2: Android Handler 
      • Part 3: Posting and Processing Runnables with the Android HaMeR Framework
      • Part 4: Sending and Handling Messages with the Android HaMeR Framework
      • Part 5: Blackbox and Whitebox Frameworks with AsyncTask
    • Section 4: Communication Patterns in Android
      • Part 1: Overview of Android Concurrency Framework Patterns
      • Part 2: Coordinating Concurrent Access with the Monitor Object Pattern
      • Part 3: Ensuring Only One Looper Per Thread with the Thread-Specific Storage Pattern
      • Part 4: Passing Commands to Handlers with the Command Processor Pattern
      • Part 5: Passing Messages to Handlers with the Active Object Pattern
      • Part 6: Decoupling Synchronous and Synchronous Processing with the Half-Sync/Half-Async Pattern

    Throughout this MOOC we'll focus on pattern-oriented software architecture, with an emphasis on concurrent programming in the context of Android middleware systems programming mechanisms, such as synchronous and asynchronous concurrency models. We illustrate by example how key pattern and framework concepts and relationships are applied in Android from both an application and infrastructure perspective. Many code examples are shown throughout using Java, with case study projects used to reify the key points throughout all the material in this MOOC.

    The PDF versions of all the slides used in the MOOC will be available online as the videos become available on the MOOC website.

    Recommended Background

    Ideally, students who take this MOOC will have already taken Professor Porter’s MOOCs on “Programming Mobile Applications with Android Handheld Systems”. Students should also be familiar with general object-oriented design and programming concepts (such as encapsulation, abstraction, polymorphism, extensibility, and the Unified Modeling Language (UML)), fundamental object-oriented programming language features (such as classes, inheritance, dynamic binding, and generics available in Java, basic systems programming concepts (such as event handling, processes/threads, synchronization, inter-process communication, and dynamic linking), and networking terminology (such as client/server and peer-to-peer architectures, TCP/IP, and layering).  Overviews of object-oriented design, systems programming, and networking concepts and techniques are available in the supplemental videos, but it's essential that students  understand how to read/write Java code examples.

    Suggested Readings

    Although the lectures are designed to be largely self-contained, it's recommended (but not required) that students refer to the following books:

    Course Format

    This MOOC consists of both live and recorded lectures, with integrated quiz questions designed to ensure students understand the material covered in the lectures.  There will also be the following graded material:

    • Weekly quizzes. Each quiz will contain a number of equally-weighted questions. There will be four weekly quizzes.

    • Programming assignments. You will have N programming assignments (where N == ~3) by the end of the MOOC. You will have roughly 14 days to submit your solution. Each assignment will account for 1/Nth of the total programming assignment points, so it's possible to miss an assignment and still pass the class as long as you do well on the other assignments.  

    Signature Track

    Coursera offers the Signature Track to verify the identity of students. Students in the Signature Track can receive a Verified Certificate, which involves earning a final grade greater than or equal to 70% on the quizzes, as well as completing the programming assignments with a score equal to 70% or higher.  It's  mandatory for students in the Signature Track to successfully achieve a Verified Certificate to be eligible to take the Capstone project at the end of the MoCCA Specialization.


    The FAQ for this MOOC is located here.