スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

HelloAndroidのソースコードを読む

HelloAndroid アプリで作ったソースコードをさらっと読み解きたいと思います。

最初にソースコードを掲載します。

package sample.basic;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}



Activity


本アプリでは、android.app.Activity をインポートしています。

Activityとは、画面のことをいいます。画面のあるアプリを作成するときは、必ずActivityのインポートが必要です。

HelloAndroidクラスは、Activityクラスを継承します。つまり、HelloAndroidクラスは、Activityクラスのサブクラスです。

Activityクラスの複雑な全体像を書きます。

java.lang.Object
  L android.content.Context
    L android.content.ContextWrapper
      L android.view.ContextThemeWrapper
        L android.app.Activity



アプリケーションの開始から終了までの間に、Activityは少々複雑な経路をたどります。

20110504_1
出典 : Androidアプリ作成の基本

このような複雑な経路をたどるのは、他のアプリとの兼ね合いや、バッテリー節約などの理由があります。

前記のソースに戻りますが、まず初歩的な話ですが、main()メソッドがありません。Javaでは、プログラムのエントリーポイントとして、必ずmain()メソッドが必要なはずでした。

Androidアプリでは、ActivityクラスのonCriate()メソッドがアプリケーションを実行するエントリーポイントの役割を果たします。

そのため、HelloAndroidクラスではActivityクラスを継承し、onCriate()メソッドをオーバーライドしているのです。

このonCriate()メソッド内で、文字列のオブジェクトであるTextViewクラスのインスタンスを作成し、setText()メソッドで「Hello, Android」という文字列を設定し、最後にsetContentView()メソッドでその文字列を呼び出す、というのがプログラムの流れです。

Androidではなく基本のJavaプログラム的に書くと、以下のようになるでしょうか。

public class Sample {
public static void main(String[] args) {
String str = new String();
str = "Hello, Android";
System.out.println(str);
}
}


実際には、String型で文字列を出力するだけならもっと簡略に書きますが、上のプログラムをAndroid的に表現したのが冒頭のソースだと考えると分かりやすいのではないでしょうか。


onCreate()メソッド


HelloAndroidクラスは、ActivityクラスのonCreate()メソッドをオーバーライドしています。つまり、もともとActivityクラスにonCreate()メソッドがあり、このメソッドをちょっと変化させて使っているということです。

onCreate()メソッドは、アクティビティが開始されたときに呼び出されるメソッドです。このメソッドが実際に表示を行う前の初期化処理などを行います。

引数は、Bundle型の変数savedInstanceStateです。savedInstanceStateは、アプリの前回終了時の状態を保持しています。

android.os.Bundleをインポートしているのは、このBundleクラスを使うためです。

スーパークラスのonCreate()メソッドを呼び出すことにより、アプリは前回終了したところから始められます。onCreate()メソッドをオーバーライドする場合には、必ずスーパークラスのメソッドを呼び出す必要があります。

ちなみに。一般的な意味の「バンドル」とは、パソコンを買ってすぐに使えるようにOSやソフトをあらかじめインストールした状態で販売することです。

アンドロイド的な意味の「バンドル」となると、アプリを立ち上げたらすぐに前回起動した状態から始められるようにすることになります。


TextViewクラス



TextViewクラスはViewクラスのサブクラスで、文字列の表示を設定します。あえて言えば、StringクラスのAndroid版といったイメージです。

コンストラクタを使ってインスタンスを生成する際の引数は、Contextクラスのオブジェクトです。

TextView(Context context)

ソースコードにおける引数は「this」になっていますが、HelloAndroidクラスが継承しているActivityクラスはContextクラスを継承しているので、HelloAndroidクラスのオブジェクトを指定できるのです。


関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

2012-11-02 Fri 11:14:26

このコメントは管理人のみ閲覧できます

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/7-95f6ca57
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。