学生向けAndroid勉強会(入門編)

4,171 views
4,030 views

Published on

2012/02/21 RECRUIT MediaTechnologyLabs主催の学生向けAndroid入門勉強会の資料です。

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,171
On SlideShare
0
From Embeds
0
Number of Embeds
1,044
Actions
Shares
0
Downloads
0
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

学生向けAndroid勉強会(入門編)

  1. 1. 学生向け勉強会Android入門編 リクルート Media Technology Labs 黒田 樹
  2. 2. About Me
  3. 3. 黒田 樹Plz follow @i2key :-)
  4. 4. System Integrator 元SIer就活でネット系かSIerか悩んでいる人はニュートラルな立場で相談に乗ります。
  5. 5. 空港で貨物を管理するシステム
  6. 6. 国の輸出入を管理するシステム
  7. 7. Application Architect
  8. 8. 1200人月規模 だったり300億円規模
  9. 9. 人海戦術
  10. 10. About MTL
  11. 11. Media Technology Labs.• 技術調査研究~新規事業開発を行う 「実証研究機関」• ネット分野における新しいビジネスを創る続きはWebでhttp://mtl.recruit.co.jp
  12. 12. http://shoplier.jp
  13. 13. Question
  14. 14. Webサイトやアプリを作ったことがある人
  15. 15. Javaどんくらいですか?・未経験・HelloWorld !!!・基礎文法だけ・学校の授業で一通り・Webサイト/アプリ作ったことある・デザインパターンをいくつか語れる
  16. 16. Agenda
  17. 17. Architectureサンプルの紹介ViewActivityIntentListViewListViewのカスタム非同期処理TIPS
  18. 18. Architecture
  19. 19. RUNTIMELinuxのユーザをアプリケーションベンダ毎(署名毎)に作成他のベンダのアプリへの権限が無い(アプリの乱立への対応)DalvikVM(JVM)はアプリケーション毎に別プロセスで起動
  20. 20. サンプルの紹介
  21. 21. SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  22. 22. SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  23. 23. SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  24. 24. DLして動作確認を!!https://github.com/i2key/HelloWorld2.0
  25. 25. Activity用パッケージ Adapter用パッケージ 非同期処理用パッケージ データクラス用パッケージ 永続化関連用パッケージ Lib配下にはTwitter4Jのjar 画面のレイアウト
  26. 26. ここで18:30だと オンスケ
  27. 27. 今日覚えること
  28. 28. ViewActivityIntent
  29. 29. SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  30. 30. QueryActivity SimpleTimeLineActivityonCreate() ButtonClickListener onCreate() onListItemClick() Viewの初期設定 onClick() Intent情報取得 Toast表示 “Send”処理定義 Intent発行 TwitterTL取得 TL情報をAdapterに
  31. 31. View
  32. 32. XMLで記述されたユーザインタフェース基本的に以下の記述形式になる<TextView android:id = “@+id/Hoge” />作成はEclipseに入っているエディタでドラック&ドロップ。直接記述の可。R.layout.Hogeとしてアクセス可能になる
  33. 33. query.xml
  34. 34. <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.63" android:hint="@string/search" > </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/send" /> </LinearLayout></LinearLayout>
  35. 35. Activity
  36. 36. 画面に対応した、コントローラークラスiOS(Xcode)で言うHogeViewController・画面表示 Viewへ出力する情報のセット Viewの加工・画面イベント処理 画面のボタン等に対応した処理を記述し、 実行するクラス 例)ボタンおされたら検索
  37. 37. QueryActivity.java
  38. 38. query.xmlをセット ボタンクリック時 の処理をセット
  39. 39. Activity1つのViewに対して、1つのActivity query.xml QueryActivity.java
  40. 40. public class ExampleActivity extends Activity { @Override public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The activity is being created. } @Override protected void onStart() { super.onStart(); // The activity is about to become visible. } @Override protected void onResume() { super.onResume(); // The activity has become visible (it is now "resumed"). } @Override protected void onPause() { super.onPause(); // Another activity is taking focus // (this activity is about to be "paused"). } @Override protected void onStop() { super.onStop(); // The activity is no longer visible (it is now "stopped") } @Override protected void onDestroy() { super.onDestroy(); // The activity is about to be destroyed. }}
  41. 41. Intent
  42. 42. View View SimpleQuery TimeLineActivity Activity Intent Intent ActivityManager
  43. 43. Intent Query SimpleTimeLine Activity ActivityActivityからActivityに遷移するための仕組み通常、画面とActivityは一対一なので、画面遷移に用いられる。Intent intent = new Intent(今のActivity,遷移先Activity);intent.putExtra(”key”,”value”);startActivity(intent);
  44. 44. QueryActivity.java
  45. 45. Intent intent = new Intent(今のActivity,遷移先Activity);intent.putExtra(”key”,”value”);
  46. 46. View View PostQuery Twitter for Androidのツイー ActivityActivity (com.twitter.an トするためのPostActivityを droid) 起動することもできる Intent Intent ActivityManager
  47. 47. ListView
  48. 48. timeline.xml
  49. 49. <?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView xmlns:android= "http://schemas.android.com/apk/res/android" android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" > </ListView></LinearLayout>
  50. 50. <?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView xmlns:android= "http://schemas.android.com/apk/res/android" android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" > </ListView></LinearLayout>
  51. 51. SimpleTimeLineActivity.java
  52. 52. 値の取り出し TwitterからTL取得 TLをList<String> にListViewにデータをセット
  53. 53. Activity レコード毎にデータを Hoge 流し込んでくれる存在 Foo Bar ArrayAdapter List<String>List<String> ・Hoge・Hoge ・Foo・Foo ・Bar・Bar他には、、、SimpleAdapter:Map型をListViewにマッピング
  54. 54. ここまでのまとめ
  55. 55. QueryActivity SimpleTimeLineActivityonCreate() ButtonClickListener onCreate() onListItemClick() Viewの初期設定 onClick() Intent情報取得 Toast表示 “Send”処理定義 Intent発行 TwitterTL取得 TL情報をAdapterに
  56. 56. ここで19:15だと オンスケ
  57. 57. ここからが本番
  58. 58. カコワルイ
  59. 59. ListViewカスタマイズ非同期ネットワークアクセス
  60. 60. CustomTimeLineActivity onCreate() onListItemClick() Intent情報取得 詳細画面遷移 TwitterTL取得(非同期) ListView表示(データ無し) onFinishTask() TL情報を独自 Adapterにセット TweetAdapterTwitterTimeline getView() 行 独自にListViewの 表示RequestTask レコード作成 選択doInBackground() (tweet.xmlレイアウト) TL情報を取得 onFinishTask()をコールバック ImageDownloadTask doInBackground() 同期 Cacheを確認 画像 ImageをDL 表示 非同期
  61. 61. ListViewカスタマイズ
  62. 62. timeline.xml
  63. 63. <?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView xmlns:android= "http://schemas.android.com/apk/res/android" android:id="@id/android:list" android:layout_width="match_parent" Listの枠は android:layout_height="match_parent" android:clickable="true" > </ListView></LinearLayout> さっきのまま
  64. 64. ArrayAdapter extendsTweetAdapter
  65. 65. tweet.xml
  66. 66. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" > <ImageView android:id="@+id/image" android:layout_width="40dip" android:layout_height="40dip" /> <LinearLayout android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/screennametext" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:focusableInTouchMode="false" android:gravity="center_vertical" android:textColor="@color/screenname_color" /> <TextView android:id="@+id/tweettext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:ellipsize="marquee" android:focusableInTouchMode="false" android:singleLine="false" android:textColor="@color/text_color" /> </LinearLayout></LinearLayout>
  67. 67. TweetAdapter.java
  68. 68. 1行分のレイアウトをtweet.xmlから生成 tweet.xmlの Screennametextに screenNameを入れる tweet.xmlの tweettextに textを入れる tweet.xmlのimageに 非同期に取得した画像を入れる
  69. 69. CustomTimeLine Activity.java
  70. 70. 非同期ネットワークアクセス
  71. 71. AsyncTask(AsyncTaskLoaderは今回やりません)
  72. 72. TwitterTimeLineRequestTask.java
  73. 73. 別スレッドで実行される処理GUIスレッドで実行される処理引数はdoInBackgroundの戻り値
  74. 74. CustomTimeLine Activity.java
  75. 75. ここまでのまとめ
  76. 76. CustomTimeLineActivity onCreate() onListItemClick() Intent情報取得 詳細画面遷移 TwitterTL取得(非同期) ListView表示(データ無し) onFinishTask() TL情報を独自 Adapterにセット TweetAdapterTwitterTimeline getView() 行 独自にListViewの 表示RequestTask レコード作成 選択doInBackground() (tweet.xmlレイアウト) TL情報を取得 onFinishTask()をコールバック ImageDownloadTask doInBackground() 同期 Cacheを確認 画像 ImageをDL 表示 非同期
  77. 77. ここで19:45だと オンスケ
  78. 78. あと少し
  79. 79. Tweet.java ・screenName ・text ・date ・image ・ …etcCustomTimeLine TweetDetailActivity Activity Intent
  80. 80. Intent 基本的なデータ型しか送信できない。 しかし、Parcelableインタフェースを実 装することによって、Parcelable型で受 け渡しが可能。 Tweet implements Parcelable ・screenName ・text ・date ・image ・ …etc
  81. 81. Tweet.java
  82. 82. TweetDetailActivity.java
  83. 83. tweet_detail.xml
  84. 84. TIPS
  85. 85. メモリーリーク対策 その1メモリーリークになるときに、DalvikVMに優先的にメモリー解放させることが出来る。SoftReference以外からの参照が無い場合に、解放。
  86. 86. DalvikのGCのはなしアクティブじゃないActivityはGC対象になる。状態はシリアライズされる。アクティブになったときはそこから復元される。
  87. 87. パフォーマンスアップオブジェクトを生成しない・文字列操作はStringではなく、 StringBufferでやる。・プリミティブ型を使う。 Integer -> int・などなど
  88. 88. パフォーマンスアップインタフェース型を利用しない× Map map = new HashMap();○ HashMap map = new HashMap();
  89. 89. パフォーマンスアップローカル変数にキャッシュする
  90. 90. パフォーマンスアップStaticメソッドを使うオブジェクトのフィールドにアクセスしない場合は、メソッドをStatic化しておく。
  91. 91. ここにまとまってますhttp://developer.android.com/guide/practices/design/performance.html
  92. 92. DIしたい人RoboGuicehttp://code.google.com/p/roboguice/
  93. 93. 課題Twitter4jで戻している値を詳細画面に表示させようー詳細画面に発言者のNameを追加する。(Twitter4j.Statusの中にUserクラスがあって、そのメンバのnameをつかう。

×