CommonsWare offers a variety of one-day seminars on intermediate and advanced Android app development topics, to go along with the week-long introductory course. Each seminar stands alone, though you can combine them to craft a custom agenda for a multi-day continuing education course.

Here you can find thumbnail descriptions of the seminars, along with links to detailed agendas for each of them.

If you find these interesting, or if you have questions, contact CommonsWare!

Intermediate Seminars

These seminars are designed for developers with some experience in writing Android apps who are looking for continuing education and getting deeper into Android.

While there are many architecture options -- MVC, MVP, MVVM, VIPER, MVI, etc. -- one common theme among all their adherents is a move towards reactive programming. RxJava makes it easier for you to model your app's interactions as a stream of events that you can manipulate with a flexible threading model.

To further empower developers to create coherent architectures, Google has created the Architecture Components, as a key part of the Jetpack initiative. The Architecture Components are designed to solve common higher-level Android development problems, such as lifecycle management, data paging, and database access.

Android user interfaces can range from the very simple to the very complex. If you have already implemented some basic user interfaces — or have attended the basic UI seminar — then this seminar can help you deal with more elaborate scenarios. In particular, this seminar is focused on building blocks of user interfaces independent of any particular design aesthetic (e.g., material design). This seminar also looks into how Android's renewed focus on larger screens (e.g., Chrome OS devices), and its corresponding multi-window and drag-and-drop features, can be leveraged within your app.

Getting your Android app to work is tough enough. Getting it to work in a performant fashion requires additional effort. And, unlike crashes that get your attention, poor app performance is "the silent killer" that can drag down your users' devices and their satisfaction with your app. In this one-day seminar, we will review five key Android app usage metrics (RAM, CPU, power, local storage, and bandwidth) and discuss how to measure and optimize your app's use of each.

Security has been getting a lot more attention recently, due to high-profile attacks that have garnered lots of news coverage. Mobile security is no different, as app developers have to take into account how to secure their apps — and, by extension, their users and those users' data — from attackers bent on absconding with, or damaging, data.

Testing Android apps sometimes feels like it is more complicated than writing the apps themselves. There seems to be a dizzying array of testing tools and frameworks, and it may not be clear to you how these work together and which ones to choose for different circumstances.

Files and databases are for storage that your app manages. When you need to share information with other apps — or with the OS itself — we tend to turn towards content. Android's content system allows us to interact with other apps as if they offered tiny REST-style Web services, without the overhead and security issues involved in TCP/IP. Yet ContentProvider, ContentResolver, and related classes remain a mystery to many Android app developers — this seminar will help clarify how all of this works and how you can use it.

Advanced Seminars

These seminars are designed for experienced developers looking for continuing education into specialized areas within Android.

There are many ways for apps to integrate with other apps. Sometimes, the "other apps" are special ones, like the home screen or Web browsers. Sometimes, the "other apps" can be fairly arbitrary. Usually, our integration is "loosely coupled", where our apps do not know much, if anything, about the other apps that we integrate with. But it is this sort of integration that powers the overall Android ecosystem, allowing apps to work with other apps and provide a (relatively) seamless experience for the user.

User interfaces are a never-ending source of complexity. It seems like every time that we turn around, somebody else is asking for our UI to do something that it does not do. While a basic UI can solve most problems for most users, solving all problems for all users tends to require a lot more work. In this seminar, we will dive deeply into some common Android constructs, to see how we can configure them to solve more problems while retaining the core for our basic UI.