Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,221 views

Published on

AndroidのHelloWorldを題材に継承について学習します。
またActivityのライフサイクルにも触れています。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

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

×