Hatena::Groupxn--272ax3f

Android アプリ開発勉強会 #1

Android アプリ開発勉強会 #1

プレゼンテーション

プロジェクトの作成

  • プロジェクト作るよ!
  • 必要な項目を入力すれば完成
    • Application name : ユーザーに表示される名前
    • Project name : Eclipse で使われるプロジェクト名
    • Package name : プロジェクトの基本となる Java パッケージ名; 自分のドメインを逆にしたやつで始める
  • 今回は “Blank Activity” を作る

アプリを動かす

  • アプリを動かすよ!
    • 実機で動かす場合、USB ドライバを入れておかなければならない
    • Eclipse の 「Run as」 で最初に 「Run Configuration...」 してデバイスを選択して実行
  • プロジェクト内のファイルの一部紹介
    • AndroidManifest.xml : アプリの基本的な特性 (?)
    • src/ : 主なソースファイルを入れておく場所
    • res/ : アプリリソースのためのサブディレクトリを含む。 以下のような。
      • drawable-XXX/ : 各種スクリーン密度のためのリソースファイルを含む
      • layout/ : UI 定義用のファイルを含む
      • values/ : 文字列や色の定義のための XML ファイルのような、様々な XML ファイルを含む

UI の基礎

  • UI は View と ViewGroup による階層構造
    • View : ボタンとか入力欄とか
    • ViewGroup : 中の View の配置を決める見えない入れ物
  • レイアウトXML で記述できる
    • 今回は MainActivity.xmlレイアウトを決めている res/layout/activity_main.xml を編集する

ViewGroup の例 : LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
</LinearLayout>

View の例 : テキスト入力欄

    <EditText android:id="@+id/edit_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />

文字列リソース

<resources>
    <string name="app_name">My First App</string>
    <string name="edit_message">Enter a message</string>
    <string name="button_send">Send</string>
    <string name="action_settings">Settings</string>
</resources>

別の Activity の開始

  • そういえば Activity って何か説明してない
    • ユーザーが何かするためにやりとりする対象となるスクリーンを提供するアプリケーションの部品
    • これまでの例では BlankActivity
  • 別の画面 (Activity) に遷移するには別の Activity を開始する

ボタンクリックへの応答

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    // Do something in response to button
}

Intent と次の Activity の開始

  • Intent は、別々の部品間 (例えば 2 つのアクティビティ間) の実行時の繋ぎ合わせを提供するもの
    • 別の Activity を開始するのに最もよく使われる
// 第 1 引数は Context. Activity は Context のサブタイプ
Intent intent = new Intent(this, DisplayMessageActivity.class);

Activity の作成と Intent の受け取り

暗黙的な Intent

まとめ : Android アプリ開発の基礎

ライフサイクルの管理

  • Activity が起動させられたり別の Activity に切り替わったりするとき、ライフタイムにおける状態が変化する
    • 状態の遷移時にはコールバックメソッドが呼ばれる
  • 静的な状態は次の 3 つ
    • Resumed (running) : この状態の Activity は最前面で動いていて、ユーザーはこの Activity とやりとりできる
    • Paused : 最前面の別の Activity に一部が隠されていて、ユーザーとはやりとりできない状態
    • Stopped : 完全に隠れていて、ユーザーからは見えない

Activity の開始

  • ホーム画面のアイコンタップ時に起動される Activity は AndroidManifest.xml に記述
  • onCreate → onStart → onResume
    • onCreate はライフサイクルの最初に 1 回だけ。 UI 定義やクラススコープ変数初期化
    • onStart が呼び出されたときにはアプリは可視状態
  • onCreate に対応するものとして onDestroy : 最後のリソース開放の機会

Activity の一時停止と再開

  • onPause : running 状態から Paused (一部が隠れる) か Stopped (全部隠れる) に遷移するときに最初に呼ばれる
    • アニメーションや進行中の処理の停止、不必要なセンサーの停止など
    • 自動で保存されるとユーザーが期待する変更内容の保存
    • 時間がかかる処理は onStop で
  • onResume : 一時停止しているところからの復帰だけでなく、起動時にも呼び出されることに注意

Activity の停止と再起動

  • onStop : これが呼び出された時点で Activity の UI は表示されていない
  • onRestart / onStart : 再開時
    • 基本的には onStart だけで事足りるはず

Activity の再生成

  • システムの制約で Activity が破棄される場合は情報が (Key-Value ペアとして) Bundle オブジェクトに格納される
    • 画面の回転でも Activity は破棄される
  • デフォルトでは View の情報が格納される (View には id が付けられていなければならない)
  • デフォルトの挙動を変えたいならば下記メソッドをオーバーライド

まとめ : Activity のライフサイクルの管理

  • ホーム画面のアプリのアイコンがクリックされたときに実行される Activity は manifest の記述で決定される。
  • Activity は生成されてから破棄されるまで、ライフタイム中の複数の状態を遷移しうる。
  • Activity のライフタイム中の状態遷移時にはコールバックメソッドが呼び出される。
  • コールバックメソッドでは適切にリソースの解放などをしなければならない。
  • Activity が再生成されるときにはインスタンス状態を Bundle オブジェクトに保持しておける (?)

次回