Androidアプリケーションの構成

#はじめに
対象者：android開発初心者
　　　　javaの基本的な理解はできている
　　　　androidStudioの導入が完了している
同じく、開発初心者による備忘録のような形になります。
[Day1.AndroidStudioにおけるプロジェクトの作り方](http://qiita.com/BD1-FM/items/f9caa43b2d5510ddcfe4)

##Androidアプリ
androidアプリケーションはjava言語で記述されています。
今回はAndroidアプリケーションがシステム内でどのような形で存在しているのかの基礎をまとめます。

- Componentsの話
- Contextの話
- manifestsの話
- resourceの話


## androidにおけるcomponentsの話
android開発において重要なコンポーネントは以下の通りです。
それぞれがAndroidアプリケーションを構築するための重要要素です。
４つの異なるタイプのコンポーネントが存在し、開始（コンポーネントの作成）から終了（コンポーネントの破棄）までのライフサイクルの仕組みもまったく別物です。それぞれ専門的に動くものなので現在では、これらのコンポーネントに分かれている、という意識をもって開発することが大切になります。
- Activity
- Service
- ContentProvider
- BroadcastReceiver

Activity:
ユーザーの目に見える部分（画面）のコンポーネントです。ユーザーインターフェースを持つ一つ一つの画面を表現します。
Service:
メインスレッドで動作する、バックグラウンドで動作するコンポーネントです。インターフェースをもっていません。そのため、長時間の処理やリモートプロセスの実行を行うことにしようされます。
ContentProvider:
アプリケーションがデータを保持する際に、アクセスを仲介するインターフェースです。具体的にはSQLiteをはじめ、ストレージへのアクセスやweb上データのアクセス、他アプリへのデーターソースへアクセスや変更もできます。
BroadcastReceiver:
Androidアプリ、また端末内での広範囲なブロードキャストアナウンスに応答するコンポーネントです。
具体的な話をすると、画面のOn,Offの情報やアプリがデータの保存が完了したなどをシステムの起因で確認することができます。こちらもインターフェースを持ってはいませんが、ステータスバーなどを通してユーザーにイベントを報告することはできます。

###　intentの話
上で説明した　Activity Service broadCastReceiver　はintentと呼ばれる非同期のメッセージにより起動されます。intentはそれぞれのコンポーネント通しを結び付け、コンポーネントを起動させます。
また、intentには種類があります。

- 明示的Intent
- 暗黙的Intent
- IntentFilter

明示的Intent:
次にどのコンポーネントに結びつくかが表されているIntentです。
暗黙的Intent:
次にどのコンポーネントに結びつくかが表明されていないIntentです。抽象的には決まって入てそれをユーザーが選択します。
具体的な話をすると　Twitterでつぶやくが、それをTwitterクライアントで行うのか、ブラウザで行うのかを選択させる、という形です。


## Contextの話
androidDevelopersから抜粋
 >Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

[androidDevelopers](http://developer.android.com/reference/android/content/Context.html)

- アプリケーションの情報をAndroidアプリケーション内全体で受けた渡しをするためのインターフェースです。
- Activityを起動する（intent,broadCast)の受取といったほかのアプリからの問い合わせに答え、Android OS特有のResourceやclassにアクセスできる。

また、contextはライフサイクルを持っています。
端末上での状態の遷移を管理するのはcontextです。contextも種類がありそれらを意識してアプリ開発をしていく必要があります。

###Contextの種類
contextには上記通りいくつか種類があります。
 - Aplication
 - Activity
 - Service

です。
Aplication:アプリケーション全体のcontextです。アプリケーション全体のライフサイクルを持っていて起動から終了までを管理しています。
Activity:こちらはActivity範囲でのライフサイクルを管理しています。
Service:layoutを持たずバックグラウンドで処理されるcontextそれらのライフサイクルを管理している。

## manifestsの話
Androidシステムがコンポーネントを認識する時、このファイルを参照します。
ここにアプリケーション宣言しておくことでコンポーネントをシステムが理解します。
また、manifestsはアプリのパーミッション（権限）も管理します。

## resourceの話
[Day1.AndroidStudioにおけるプロジェクトの作り方](http://qiita.com/BD1-FM/items/f9caa43b2d5510ddcfe4)の下のほうにresフォルダの画像があります。
Androidアプリケーションはコードだけでなく、さまざまなビジュアル的表現のResourceが必要になります。
アニメーションやメニュー、スタイル、カラーなどのUIをxmlで宣言、記述します。

- Animation Resources
- String Resources
- menu Resources
- Style Resources
- Color Resources
- Drawable Resources

Animation Resources:
UIの動き（アニメーション）を定義します。
String Resources:
文字列の定義や分限のフォーマットを定義します。
Menu Resource:
メニューで呼び出されるボタンなどの定義を行います。
Style Resource:
UIのスタイルを定義します。
Color Resources:
色の定義を行います。カラーコードにより定義をします。
Drawable resources:
画像やxmlで描いたグラフィックを定義します。

次回
[Day3.アプリケーションのレイアウト](http://qiita.com/BD1-FM/items/eb4a25cedca2ff8078fd)