Top Banner
Re:Kayo-System Co.,Ltd. Twitter @yokmama Now Loading. Please Wait ... AndroidでHelloWorld 夜子まま塾 講義6(HelloWorldで継承を学習する) 2012228日火曜日
43

夜子まま塾講義6(androidでhello world)

Jan 15, 2015

Download

Technology

AndroidのHelloWorldを題材に継承について学習します。
またActivityのライフサイクルにも触れています。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

Twitter @yokmamaNow Loading. Please Wait ...

AndroidでHelloWorld夜子まま塾 講義6(HelloWorldで継承を学習する)

2012年2月28日火曜日

Page 2: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

自己紹介氏名   :寺園聖文(てらぞの まさふみ)

肩書   :株式会社Re:Kayo-System 代表取締役社長

活動拠点 :神戸近郊~日本→海外行きたい

著書   :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)

      「HTML5によるAndroidアプリ開発入門」監修(日経BP)

アプリ  :「JUST PLAYER」「Skip Memo」「ふりがなオートマチック」等

好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環

嫌いなもの:とくになし

最近のテーマ:電子工作、運動すること、英語

2012年2月28日火曜日

Page 3: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

AndroidのHelloWorld

EclipseのAndroidプロジェクト作成ウィザードを用いて雛形のアプリを作成すると、HelloWorldを表示するAndroidアプリ

が作成されます。

2012年2月28日火曜日

Page 4: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

作成手順File→New→Android Project

① Create Android Project

② Select Build Target

③ Application Info

これをチェックをすると自動でHelloWorldのプログラムが生成されます。

2012年2月28日火曜日

Page 5: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

作成されたプロジェクト

自動生成されたHelloWorldのJavaプログラム

自動生成されたHelloWorldのレイアウトXMLファイル

2012年2月28日火曜日

Page 6: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

生成されたJavaプログラムpackage ykmjuku.android.helloworld.app;

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

public class Ykmjuku003Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

Activityを継承したクラスとして宣言

ActivityのonCreateメソッドをオーバライドし

たメソッド

親クラス(Activity)のonCreateを呼び出す

main.xmlのレイアウトファイルを読み込む

2012年2月28日火曜日

Page 7: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

Activityを継承

Androidの画面アプリはActivityを継承し作成します。

2012年2月28日火曜日

Page 8: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

継承とは?

Javaのクラスを拡張し独自のクラスとして再定義する仕組みです。

2012年2月28日火曜日

Page 9: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

継承を図でみるとA

+hoge+fuga

B+hoge+foo

C+fuga

Aの機能と独自に再定義した

hogeと新しく追加したfoo が使える

AとBの機能と独自に再定義したfugaが使える

継承 継承

2012年2月28日火曜日

Page 10: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

型の互換性

A a = new B();

大は小を兼ねるが、小は大を兼ねない

A a = new C();B b = new C();

B b = new A();C c = new B(); NG

OK

2012年2月28日火曜日

Page 11: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

継承の具体例

public void func(A a){ a.hoge(); System.out.println(a.fuga());}

このような関数があったとして

引数にAというクラスを受け取っています。

2012年2月28日火曜日

Page 12: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

継承の具体例B b;//bの設定func(b)

C b;//cの設定func(c)

どちらもエラーにならない。つまり、Aを継承したクラス(B,C)はAとして使うことができるので、Aを引数に受け取るメソッドを利用することができる。

2012年2月28日火曜日

Page 13: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

もう少しつっこんでライブラリ

A

Aを引数に処理をする関数

Aを継承して作成したB

使うことができる

※ライブラリ:関数やクラス等を1つのファイルにまとめたもの

2012年2月28日火曜日

Page 14: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

継承の方法class <クラス名> extends <親クラス名>{}

extendsの後ろに継承したいクラス名を書きます。

public class Ykmjuku003Activity extends Activity {}

構文

2012年2月28日火曜日

Page 15: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライドとは

継承したクラスのメソッドを変更することです。

2012年2月28日火曜日

Page 16: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライドを図でみる

A+hoge+fuga

B+hoge継承

Bはhogeというメソッドをオーバーライドして変更した

2012年2月28日火曜日

Page 17: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

プログラムではAのhogeは数字の1を表示するBのhogeは数字の2を表示する

class A{ void hoge(){ System.out.println("1"); } } class B extends A{ void hoge(){ System.out.println("2"); } }

2012年2月28日火曜日

Page 18: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

この答えは?

B b = new B();b.hoge();

2012年2月28日火曜日

Page 19: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

b.hoge()の答え

答えは数字の2を表示です。

B b = new B();b.hoge();

2012年2月28日火曜日

Page 20: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ではこれは?

A a = new B();a.hoge();

2012年2月28日火曜日

Page 21: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

a.hoge()の答え

A a = new B();a.hoge();

答えは数字の2を表示です。

2012年2月28日火曜日

Page 22: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバライド

Javaは継承したクラスのメソッドを変更し再定義することができます。

この変更されたメソッドは型変換によって別の型になっても変わりません。

2012年2月28日火曜日

Page 23: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライドの方法親クラスのメソッドと同じ引数、同じ戻り値の型、同じ名前で定義することでオーバーラ

イドできます。

class B extends A{ @Override void hoge(){ System.out.println("2"); } }

つけなくてもよい、明示的にオーバーライドしています。

という意味、これが付いているとオーバーライドが出来ていない場合にエラーになります。

2012年2月28日火曜日

Page 24: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

もう一度、HelloWorldを見てみる

package ykmjuku.android.helloworld.app;

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

public class Ykmjuku003Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

Activityを継承したクラスとして宣言

ActivityのonCreateメソッドをオーバライドし

たメソッド

親クラス(Activity)のonCreateを呼び出す

main.xmlのレイアウトファイルを読み込む

2012年2月28日火曜日

Page 25: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

superについてpublic class Ykmjuku003Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

super.onCreate(savedInstanceState);

2012年2月28日火曜日

Page 26: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

superとはsuperは親クラスのインスタンスです。

thisが自分のインスタンスを指していることは過去のスライド「夜子まま塾講義2(Javaのクラス

とメソッド)」説明しました。superは同じく自分自身のインスタンスであるのですが、親クラスのメソッドやフィールドを利用

する場合に使う予約変数です。

2012年2月28日火曜日

Page 27: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ActivityについてActivityはAndroidのSDKに含まれている

クラスです。主に画面を作成するアプリを作る場合に基となるクラスで、これを継承し画面の操作や表示に関わる処理をオーバーライドすることで新しい画面アプリを作ることができ

ます。

2012年2月28日火曜日

Page 28: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

Activityの仕組みActivityはActivityManagerによって管理さ

れています。ActivityManagerはAndroidOSによって生成されて管理されているクラスなので、とく

に生成等の必要はありませんが、ActivityManagerによってActivityの振る舞いが制御されていることを知っておく必要が

あります。

2012年2月28日火曜日

Page 29: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ActivityのライフサイクルAndroidデバイスの状態によって、Activityの状態が左図のように変更され、と同時に対応するメ

ソッドを呼び出す。Activityを継承したクラスはそれらのメソッドをオーバーライドすることで、状態に応じてプログラムを実装することができる。

2012年2月28日火曜日

Page 30: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

各状態の説明スタート

onCreate()

onResume()

実行中

onPause()

onStop()

onDestory()

プロセス停止

onRestart()

終了

onStart()

Activityが表示される

Activityが表示される

他のActivityが呼ばれる

Activityが隠れる

メモリ不足等により停止される

アプリ起動

2012年2月28日火曜日

Page 31: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

Activityは画面に1つ

Activityは画面上に1つしか表示できません。

Activityから他のActivityを呼び出すと呼び出し元のActivityは停止し

ます。

2012年2月28日火曜日

Page 32: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

しかしそれは少し違う

停止したといっても、あくまでActivityManager上の状態であって。

もしActivity内で並列でなにかをしている場合はその処理は停止しません。そのためそれらも一時停止したい場合はPause等のメソッドで停止処理を

行う必要があります。

2012年2月28日火曜日

Page 33: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

だからといって安心してはいけない

Activityが停止している状態では、メモリ不足等によって強制的に終了される場合があるため、適切な停止処理をしてお

くのがよいでしょう。

2012年2月28日火曜日

Page 34: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ところで、HelloWorldAndroidのHelloWorldはHelloWorldと書かれたレイアウトファイルを読み込んでいるだ

けなので、とても簡単です。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />

</LinearLayout>

main.xml

直接HelloWorldの文字列が設定されている。

2012年2月28日火曜日

Page 35: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

作ってみようハローワールドを改造してみます。ここで作るプログラムはActivityの

ライフサイクルを知るために、各メソッド(onCreate,onResume,onPause,onDestory)をオーバーライドし、メソッドの中でLogを出力するプログラムを作ってください。

2012年2月28日火曜日

Page 36: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライド手順①オーバーライドメソッドを挿入する箇所にカーソルを移動し右クリックしてください。

ここで右クリック

2012年2月28日火曜日

Page 37: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライド手順②右クリックメニューから Override/implement

Methods...を選択してください。

2012年2月28日火曜日

Page 38: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

オーバーライド手順③ダイアログからオーバーライドしたいメソッドを選

択しOKボタンをクリックしてください。

2012年2月28日火曜日

Page 39: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

Log出力

AndroidのログはLogクラスを使って出力し、LogCatツールを使って確認します。

ログとは、プログラムの実行状況を把握するために画面やコンソールに文字列を出力することです。

2012年2月28日火曜日

Page 40: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

LogクラスLog.e(<タグ>, <ログ>); ←エラーログLog.w(<タグ>, <ログ>); ←警告ログLog.i(<タグ>, <ログ>); ←情報ログLog.d(<タグ>, <ログ>); ←デバッグログLog.v(<タグ>, <ログ>); ←冗長ログ

使用例

@Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.d("Sample", "onResumeにきました"); }

構文

2012年2月28日火曜日

Page 41: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ログについて各ログはそれぞれ、プログラムの状況に合わせて使い分けます。例えば、例外が発生しる場合のログはエラーログ、問題というレベルではないけど注意したい場所は警告ログ。デバッグ用のログはデバッグログなど。それぞれ色が違うので使い分けることでログの確認がしやすくなります。

2012年2月28日火曜日

Page 42: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

ログの確認DDMSパースペクティブにあるLogCatで確認できます。このLogCatはWindow→Show Viewからどこのパースペクティブにでも追加できますの

で、よく使う場所に追加しておくとよいです。

ログがでないときは、このデバイスでログを見たい端末を選択してみてください。

このLogCatはどこのパースペクティブにも追加できますし。D&Dで移動することもで

きます。

2012年2月28日火曜日

Page 43: 夜子まま塾講義6(androidでhello world)

Re:Kayo-System Co.,Ltd.

レイアウトは?続きは夜子まま塾オンライン(無料)にて毎週水曜日夜10:30~11:00(都合によりない場合もあります)

http://bit.ly/wTjjixGoogleID:101190223376062765723

夜子まま塾

上記アカウントをサークルに追加していると、ハングアウトのお誘いが届きます。

是非ご参加ください。

2012年2月28日火曜日