どろあそび (1)
世の中に少しでも追いつこうかとAndroidの勉強を始めました。
まず、Androidデベロッパーサイト <https://developer.android.com/> にあるチュートリアルから手を付けることにしました。
内容はAndroid Studioを使用した簡単なアプリケーションの作成になります。
まだ、Hello, World程度の入門レベルしか見ていませんが、とりあえず分かったことをメモしておきます。
内部的な実現方法はわかりませんが、外面的にはAndroidアプリケーションはActivityクラスの実装となっています。
これはAndroidアプリケーションの起動経路が画面上でアプリアイコンをタップするだけでなく、例えばメールを出す、あるいは写真を撮るといった機能モジュールとして実行される場合もあることに対応して、機能ごとに必要な起動処理を行えるようにしたということだと思います。
また、アプリケーションの実行に必要な資源を節約するため、アプリケーションを機能単位で動的に読み込めるようにしているためかもしれません。
起動操作とActivityの関係はManifestファイルに記述します。
Manifestファイルのapplication要素に含まれるactivity要素にActivity名とそのActivityを起動するアクション (インテント) を記述し、システムはクライアントアプリケーションが指定したインテントに対応したActivityを起動することでアプリケーションを起動する仕組みになっているようです。
Activityクラスは状態変化に応じてシステムから所定のメソッドが実行されます。
基本的にはonCreate、onStart、onResume、onPause、onStop、onDestroyの6種のメソッドが状態遷移に応じて呼び出されるとのことですが、入門レベルではAcitivityの起動時に呼ばれるonCreate (これだけは実装が必須) しか扱わないので、これらのメソッドで実装しなければならないこと、実装してはいけないことは後々調べていかないといけません。
ところで、onCreateには引数としてsavedInstanceStateが与えられます。前回終了時の状態をシステムが管理し、引数として与えることでアプリケーションの終了と再開を高速化しようという意図と思われますが、これに関しても学習範囲外だったので今後調べていく予定です。
さて、onCreateではスーパークラスのonCreateを呼び出した後、setContentViewを呼び出すコードがAndroid Studioの生成するテンプレートに記述されています。
setContentViewは引数としてアプリケーションの初期画面のレイアウト資源のID (開発システムか何かが自動的に生成する値のようで整数型ですが、その値はAndroid Studio上で確認することはできないようで、レイアウト定義ファイルのファイル名に基づいた変数名でアクセスします) を取り、レイアウトに基づいた画面を生成します。
レイアウト画面はGUIでも作成できますが、XMLファイルとして出力されるので、XMLデータとしても作成することができます。
レイアウト要素にはテキスト入力・表示要素 (TextView)、画像表示要素 (ImageView) などの基本要素 (View) と基本要素の配置を指示するViewGroupから構成され、ViewGroupを適切に組み合わせて配置することで画面サイズの変動に対応した表示を行えるようにしていますが、例えばスマートフォンとタブレットのように大きくサイズが異なるものへの対応は自動的にはできないため、画面解像度や画面サイズに合わせて複数のレイアウトを定義しておき、表示時点で使用するレイアウトを動的に決める仕組みが入っているようです。
レイアウトで使用する文字列も同様にリソース (values/strings.xml) で定義できて、レイアウトから参照できます。
コードからレイアウト要素にアクセスするにはレイアウト要素にIDを文字列として設定し、コードからはIDとして設定された文字列を変数名とする変数からID番号を取得してfindViewByIdでレイアウト要素に変換します。
レイアウト要素はActivityの生存中は生存し続けるようで、チュートリアルではActivityのクラス変数としてonCreateが呼び出されてsetContentViewで初期画面を生成した後にクラス変数に保存しておく手順が推奨されていました。
ところで、Android開発ではプログラム言語Kotlinが推奨されています。
これは強い型付けを行うプログラム言語なのですが、変数宣言時には型指定を行わず、値の代入が行われた時点で代入された型により変数の型が決まるという不思議な仕組みを入れています (もちろん明示的に型指定を行っても問題ありません)。
ほかにもいろいろと不要な文字数を減らす工夫がされていて、そのために若干読みにくくなっているような気もするのが微妙なところです。
Kotlinについてもどこかで一度まとめないとわからなくなりそうな気がします。
と、今日はこんなところで。
0コメント