Upload
masafumi-terazono
View
956
Download
0
Embed Size (px)
DESCRIPTION
AndroidのHelloWorldを題材に継承について学習します。 またActivityのライフサイクルにも触れています。
Citation preview
Re:Kayo-System Co.,Ltd.
Twitter @yokmamaNow Loading. Please Wait ...
AndroidでHelloWorld夜子まま塾 講義6(HelloWorldで継承を学習する)
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
自己紹介氏名 :寺園聖文(てらぞの まさふみ)
肩書 :株式会社Re:Kayo-System 代表取締役社長
活動拠点 :神戸近郊~日本→海外行きたい
著書 :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)
「HTML5によるAndroidアプリ開発入門」監修(日経BP)
アプリ :「JUST PLAYER」「Skip Memo」「ふりがなオートマチック」等
好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環
嫌いなもの:とくになし
最近のテーマ:電子工作、運動すること、英語
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
AndroidのHelloWorld
EclipseのAndroidプロジェクト作成ウィザードを用いて雛形のアプリを作成すると、HelloWorldを表示するAndroidアプリ
が作成されます。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
作成手順File→New→Android Project
① Create Android Project
② Select Build Target
③ Application Info
これをチェックをすると自動でHelloWorldのプログラムが生成されます。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
作成されたプロジェクト
自動生成されたHelloWorldのJavaプログラム
自動生成されたHelloWorldのレイアウトXMLファイル
2012年2月28日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
Activityを継承
Androidの画面アプリはActivityを継承し作成します。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
継承とは?
Javaのクラスを拡張し独自のクラスとして再定義する仕組みです。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
継承を図でみるとA
+hoge+fuga
B+hoge+foo
C+fuga
Aの機能と独自に再定義した
hogeと新しく追加したfoo が使える
AとBの機能と独自に再定義したfugaが使える
継承 継承
2012年2月28日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
継承の具体例
public void func(A a){ a.hoge(); System.out.println(a.fuga());}
このような関数があったとして
引数にAというクラスを受け取っています。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
継承の具体例B b;//bの設定func(b)
C b;//cの設定func(c)
どちらもエラーにならない。つまり、Aを継承したクラス(B,C)はAとして使うことができるので、Aを引数に受け取るメソッドを利用することができる。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
もう少しつっこんでライブラリ
A
Aを引数に処理をする関数
Aを継承して作成したB
使うことができる
※ライブラリ:関数やクラス等を1つのファイルにまとめたもの
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
継承の方法class <クラス名> extends <親クラス名>{}
extendsの後ろに継承したいクラス名を書きます。
public class Ykmjuku003Activity extends Activity {}
例
構文
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライドとは
継承したクラスのメソッドを変更することです。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライドを図でみる
A+hoge+fuga
B+hoge継承
Bはhogeというメソッドをオーバーライドして変更した
2012年2月28日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
この答えは?
B b = new B();b.hoge();
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
b.hoge()の答え
答えは数字の2を表示です。
B b = new B();b.hoge();
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
ではこれは?
A a = new B();a.hoge();
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
a.hoge()の答え
A a = new B();a.hoge();
答えは数字の2を表示です。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバライド
Javaは継承したクラスのメソッドを変更し再定義することができます。
この変更されたメソッドは型変換によって別の型になっても変わりません。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライドの方法親クラスのメソッドと同じ引数、同じ戻り値の型、同じ名前で定義することでオーバーラ
イドできます。
class B extends A{ @Override void hoge(){ System.out.println("2"); } }
つけなくてもよい、明示的にオーバーライドしています。
という意味、これが付いているとオーバーライドが出来ていない場合にエラーになります。
2012年2月28日火曜日
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日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
superとはsuperは親クラスのインスタンスです。
thisが自分のインスタンスを指していることは過去のスライド「夜子まま塾講義2(Javaのクラス
とメソッド)」説明しました。superは同じく自分自身のインスタンスであるのですが、親クラスのメソッドやフィールドを利用
する場合に使う予約変数です。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
ActivityについてActivityはAndroidのSDKに含まれている
クラスです。主に画面を作成するアプリを作る場合に基となるクラスで、これを継承し画面の操作や表示に関わる処理をオーバーライドすることで新しい画面アプリを作ることができ
ます。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
Activityの仕組みActivityはActivityManagerによって管理さ
れています。ActivityManagerはAndroidOSによって生成されて管理されているクラスなので、とく
に生成等の必要はありませんが、ActivityManagerによってActivityの振る舞いが制御されていることを知っておく必要が
あります。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
ActivityのライフサイクルAndroidデバイスの状態によって、Activityの状態が左図のように変更され、と同時に対応するメ
ソッドを呼び出す。Activityを継承したクラスはそれらのメソッドをオーバーライドすることで、状態に応じてプログラムを実装することができる。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
各状態の説明スタート
onCreate()
onResume()
実行中
onPause()
onStop()
onDestory()
プロセス停止
onRestart()
終了
onStart()
Activityが表示される
Activityが表示される
他のActivityが呼ばれる
Activityが隠れる
メモリ不足等により停止される
アプリ起動
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
Activityは画面に1つ
Activityは画面上に1つしか表示できません。
Activityから他のActivityを呼び出すと呼び出し元のActivityは停止し
ます。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
しかしそれは少し違う
停止したといっても、あくまでActivityManager上の状態であって。
もしActivity内で並列でなにかをしている場合はその処理は停止しません。そのためそれらも一時停止したい場合はPause等のメソッドで停止処理を
行う必要があります。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
だからといって安心してはいけない
Activityが停止している状態では、メモリ不足等によって強制的に終了される場合があるため、適切な停止処理をしてお
くのがよいでしょう。
2012年2月28日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
作ってみようハローワールドを改造してみます。ここで作るプログラムはActivityの
ライフサイクルを知るために、各メソッド(onCreate,onResume,onPause,onDestory)をオーバーライドし、メソッドの中でLogを出力するプログラムを作ってください。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライド手順①オーバーライドメソッドを挿入する箇所にカーソルを移動し右クリックしてください。
ここで右クリック
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライド手順②右クリックメニューから Override/implement
Methods...を選択してください。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
オーバーライド手順③ダイアログからオーバーライドしたいメソッドを選
択しOKボタンをクリックしてください。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
Log出力
AndroidのログはLogクラスを使って出力し、LogCatツールを使って確認します。
ログとは、プログラムの実行状況を把握するために画面やコンソールに文字列を出力することです。
2012年2月28日火曜日
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日火曜日
Re:Kayo-System Co.,Ltd.
ログについて各ログはそれぞれ、プログラムの状況に合わせて使い分けます。例えば、例外が発生しる場合のログはエラーログ、問題というレベルではないけど注意したい場所は警告ログ。デバッグ用のログはデバッグログなど。それぞれ色が違うので使い分けることでログの確認がしやすくなります。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
ログの確認DDMSパースペクティブにあるLogCatで確認できます。このLogCatはWindow→Show Viewからどこのパースペクティブにでも追加できますの
で、よく使う場所に追加しておくとよいです。
ログがでないときは、このデバイスでログを見たい端末を選択してみてください。
このLogCatはどこのパースペクティブにも追加できますし。D&Dで移動することもで
きます。
2012年2月28日火曜日
Re:Kayo-System Co.,Ltd.
レイアウトは?続きは夜子まま塾オンライン(無料)にて毎週水曜日夜10:30~11:00(都合によりない場合もあります)
http://bit.ly/wTjjixGoogleID:101190223376062765723
夜子まま塾
上記アカウントをサークルに追加していると、ハングアウトのお誘いが届きます。
是非ご参加ください。
2012年2月28日火曜日