Introductory Android App Development Week
CommonsWare offers a week-long introductory Android app development course. This
is ideal for quickly getting a team “up to speed” on building Android apps.
The introductory course is divided into two phases: a hands-on phase and a lecture
The first ~1.5 days of the training will be mostly hands-on, having the team
develop an Android app from scratch. Your instructor will lead
the team through a series of steps to start a project and build a UI. Those
steps mirror the tutorials found in Exploring Android. Attendees
receive a copy of this book as part of their training, and those that are interested
can continue with additional tutorials in the book that are beyond the scope
of what we work on directly in the course.
In this phase, attendees will learn things like:
- What are the major components of an Android app?
- What tools do we use to build an Android app?
- What is the app itself — is it a file or something?
- How do we get started with Android Studio?
- What is Gradle and why do we care?
- What is the manifest, and what goes in there instead of in Gradle files?
- What are resources, and what are some of the common types of resources?
- What are assets, and why do we have both assets and resources?
- How do we run our Android project? How do we debug it?
- What is an activity? What goes inside it?
- What are the common types of widgets?
- What are common properties that we configure on widgets and containers?
- What is
- How do we use the Android Studio graphical layout editor to work with
- What are artifacts and repositories, with respect to code reuse?
- How do we configure Android Studio to pull in artifacts as dependencies?
- What is the Android Support package?
- What is the action bar? Where do we get it?
- What are themes, and how do they affect what the action bar looks like?
- How do we add overflow menu items or toolbar buttons to the action bar?
- Why would we want more than one activity in our app?
- How do we add our second activity?
- How do we pass control to that activity?
- What is
WebView, and what powers it?
- How do we load HTML content into a
- What is a fragment? And why are we only talking about these now?
- How do we create a fragment?
- How do we add a fragment to our UI?
- How do we write and run tests?
- What is a
RecyclerView, and how do we use it?
- What is the data binding framework?
- How do we use the data binding framework to reduce our code complexity?
The balance of the course builds upon the core concepts learned in the hands-on
phase, to flesh out more of the critical pieces of Android app development that
all developers need to know.
Android Internals and the Process Model
- What is Android itself, really?
- I hear stuff about “Dalvik” and ART — what are they?
- What is inside our app’s process when our app is run?
- When does our process go away?
Resource Sets, Configuration Changes, and the Lifecycle
- How do we find out when our activities and fragments are coming and going from the screen?
- What is a configuration?
- How do we have different resources for different configurations?
- How does Android choose the resource to use for a given configuration?
- What happens when the configuration changes on the fly, such as the user rotates the screen?
- How do we handle configuration changes, so we do not lose data or otherwise screw up?
- What is different about threads in Android compared to traditional Java?
- What is “jank”?
- What is the “main application thread”, and how does it pertain to jank?
- What is
- What is RxJava?
- What are permissions?
- How do we request basic permissions from users?
- How do we request dangerous permissions from users on Android 6.0+?
Files and Preferences
- What is “internal storage”, and how do we use it?
- What is “external storage”, and how do we use it?
- What are the limitations with removable storage?
- How do I share a file with another app?
- What are
SharedPreferences, and how do we use them?
- How do we build a UI to collect preferences en masse from the user, like the Settings app does?
- What is SQLite?
- What is SQLCipher for Android?
- How do we create and upgrade our database?
- How do we query our database?
- How do we do the rest of the CRUD with our database?
- What is different about Internet access on Android, compared to other Java programs?
- What are the HTTP APIs available to us?
- Gosh, this seems like a hassle — how can we solve common problems?
- How does SSL work with Android?
Intents and Intent Filters
- What are “Intent filters”?
- What happens if we try to start up an activity, and there is no matching activity?
- What happens if we try to start up an activity, and there are several matching activities?
- What is a broadcast? How do we send them? How do we receive them?
- What is a “local broadcast”, and isn’t that an oxymoron?
- How do we get control at boot time, and what does the “Force Stop” button have to do with it?
- What did Android 8.0 change with respect to broadcasts?
- What is a service, and why do we care?
- How do we set up a service?
- How do we use a service, via the command pattern?
- How do we use a service, via the binding pattern?
- How do we communicate from the service back to its client(s)?
- What did Android 8.0 change with respect to services?
- How do we make a service be accessible from other apps?
- How do we publish an API for our service, for use by other apps?
- How do we bind to services from other apps, and what does security have to do with it?
- What is a notification?
- How do we display a notification?
- What is a foreground service, and how does it pertain to notifications?
- What sorts of input do we get from users via notifications?
- How do notifications interact with Android Wear?
- What did Android 8.0 change about notifications?
Doing Periodic Work
- How do we arrange to get control periodically within an already-running app?
- How do we arrange to get control periodically, even if our app is not already running?
- What is Doze mode, and how does that affect our background periodic work?
- What is app standby mode, and how does that affect our background periodic work?
- How do we use
JobScheduler as an alternative to
IntentService, particularly on Android 8.0?
Inside the Uri
- What is a
- What are the pieces of a
- What are common
Uri schemes in Android?
- Where do we get a
Consuming Content Streams
- What is the Storage Access Framework?
- What are the Android equivalents of the “open file” and “save as” dialogs that you see on other platforms?
- We get a
Uri back from that — how do we use this?
- How can we get metadata about the content, such as its size or some sort of “name”?
- How long can we use that
Uri, and what do we do if we need access to that content for a longer time?
Consuming Database-Style Content
- What are common database-style
ContentProviders in Android?
- How do we get permission to work with those providers?
- How can we query them for data?
- What is the
Loader framework, and what is it loading?
- How can we manipulate (insert/update/delete) database-style content?
- What exactly is a
- How do we add one to our app?
- What are the key methods that a
ContentProvider will implement?
Using FileProvider and StreamProvider
- What is
FileProvider, and what problems does it solve?
- How do I theoretically add
FileProvider to my app?
- What problems does
- What is
StreamProvider, and what does it do differently from
- How do I add
StreamProvider to my app?
If you find this to be interesting, or if you have questions,