自分がもし、Androidの創業メンバーだったらどういう設計にするかを考えてみる

まずはAndroidがどうなっているかを以下のサイトを参考にまとめてみます。

Introduction to Android | Android Developers

キーワード

ユーザー寄り

・single screen 
・Apps adapt to different devices
・assigns each app a unique Linux user ID
・Each process has its own VM, so an app's code runs in isolation from other apps.

配布方式

・One APK file contains all the contents of an Android app

デバイスへのアクセス権限

・All app permissions must be granted by the user at install time

他の呼び出し

Intents and Intent Filters * アプリケーション間の呼び出し

・action that other apps may invoke(start another app using an intent)
・combination of distinct components(start another component using an intent)
  • 外部URL呼び出し
an intent might convey a request for an activity to show an image or to open a web page. 

UIとバックグランドの処理をどう分けるか

・service(work in the background)

コンポーネント

  • Activities
An activity represents a single screen with a user interface.
  • Services
A service is a component that runs in the background
to perform long-running operations or to perform work for remote processes.
  • Content providers
A content provider manages a shared set of app data.

You can store the data in the file system, an SQLite database, on the web,
or any other persistent storage location your app can access.

other apps can query or even modify the data

content provider, is not activated by intents.
Rather, it is activated when targeted by a request from a ContentResolver
  • Broadcast receivers
A broadcast receiver is a component responds to system-wide broadcast announcements.

コンポーネントの定義

AndroidManifest.xml

<activity> elements for activities
<service> elements for services
<receiver> elements for broadcast receivers
<provider> elements for content providers

プロセス

If your app starts the activity in the camera app that captures a photo,
that activity runs in the process that belongs to the camera app, not in your app's process. 

リソース

you should define animations, menus, styles, colors,
and the layout of activity user interfaces with XML files.

the SDK build tools define a unique integer ID, which you can use to reference the resource from your app code or from other resources defined in XML