The startup process…
So this is my first post in a series about Design Patterns in the Android Architecture. First though, I’d like to talk a little bit about how I will approach these posts, which means this post won’t go into much detail about Android.
As I started this thesis project I had roughly 1 year+ worth of student project experience developing on Android, whatever that equates to? So I knew my way around Android Studio and how to work with Activities, fragments and services, but my understanding of the underlying architecture was limited. So to gain a basic understanding of what the different components in the Android stack are and how they communicate and work together the following posts will walk the reader through the Android start up and application launch process. This should serve as a means to introducing elements such as the Zygote daemon, the Dalvik Virtual Machine, and the Binder which amongst others make up the core components of what Android is. The introduction of these elements are meant to familiarize the reader with the most relevant components, as we later on examine patterns which touch upon these.
The Android architecture, is a layered architecture consisting of five layers, as can be seen in the figure below, each containing components which will be discussed in the following posts to various degree. The main idea behind a layered architecture is to create a secure Object Oriented OS, which ensures isolation of processes or so called sand-boxing of applications. This, in theory, prevents malicious applications from affecting other processes in the system.
The low-level inner workings of Android are out of scope, so suffice to say that once an Android device is turned on, the CPU gets it initial instructions from the bootloader which amongst initializing RAM and setting the initial basic hardware state, also loads the kernel which is where we’ll start.
The Linux kernel will be the focus of the next post, and also I guess the first real post in this series. The main reference for the first couple of posts is Embedded Android, by Karim yaghmour.