• Save
学生向けAndroid勉強会(入門編)
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 3,896 views

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

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

Statistics

Views

Total Views
3,896
Views on SlideShare
2,947
Embed Views
949

Actions

Likes
8
Downloads
0
Comments
0

5 Embeds 949

http://i2key.hateblo.jp 659
http://d.hatena.ne.jp 282
http://webcache.googleusercontent.com 6
http://cache.yahoofs.jp 1
http://www.twylah.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 学生向け勉強会Android入門編 リクルート Media Technology Labs 黒田 樹
  • About Me
  • 黒田 樹Plz follow @i2key :-)
  • System Integrator 元SIer就活でネット系かSIerか悩んでいる人はニュートラルな立場で相談に乗ります。
  • 空港で貨物を管理するシステム
  • 国の輸出入を管理するシステム
  • Application Architect
  • 1200人月規模 だったり300億円規模
  • 人海戦術
  • About MTL
  • Media Technology Labs.• 技術調査研究~新規事業開発を行う 「実証研究機関」• ネット分野における新しいビジネスを創る続きはWebでhttp://mtl.recruit.co.jp
  • http://shoplier.jp
  • Question
  • Webサイトやアプリを作ったことがある人
  • Javaどんくらいですか?・未経験・HelloWorld !!!・基礎文法だけ・学校の授業で一通り・Webサイト/アプリ作ったことある・デザインパターンをいくつか語れる
  • Agenda
  • Architectureサンプルの紹介ViewActivityIntentListViewListViewのカスタム非同期処理TIPS
  • Architecture
  • RUNTIMELinuxのユーザをアプリケーションベンダ毎(署名毎)に作成他のベンダのアプリへの権限が無い(アプリの乱立への対応)DalvikVM(JVM)はアプリケーション毎に別プロセスで起動
  • サンプルの紹介
  • SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  • SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  • SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  • DLして動作確認を!!https://github.com/i2key/HelloWorld2.0
  • Activity用パッケージ Adapter用パッケージ 非同期処理用パッケージ データクラス用パッケージ 永続化関連用パッケージ Lib配下にはTwitter4Jのjar 画面のレイアウト
  • ここで18:30だと オンスケ
  • 今日覚えること
  • ViewActivityIntent
  • SimpleListView DetailView 詳細 チェック無し 詳細 チェック有りQueryView CustomListView
  • QueryActivity SimpleTimeLineActivityonCreate() ButtonClickListener onCreate() onListItemClick() Viewの初期設定 onClick() Intent情報取得 Toast表示 “Send”処理定義 Intent発行 TwitterTL取得 TL情報をAdapterに
  • View
  • XMLで記述されたユーザインタフェース基本的に以下の記述形式になる<TextView android:id = “@+id/Hoge” />作成はEclipseに入っているエディタでドラック&ドロップ。直接記述の可。R.layout.Hogeとしてアクセス可能になる
  • query.xml
  • <?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>
  • Activity
  • 画面に対応した、コントローラークラスiOS(Xcode)で言うHogeViewController・画面表示 Viewへ出力する情報のセット Viewの加工・画面イベント処理 画面のボタン等に対応した処理を記述し、 実行するクラス 例)ボタンおされたら検索
  • QueryActivity.java
  • query.xmlをセット ボタンクリック時 の処理をセット
  • Activity1つのViewに対して、1つのActivity query.xml QueryActivity.java
  • 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. }}
  • Intent
  • View View SimpleQuery TimeLineActivity Activity Intent Intent ActivityManager
  • Intent Query SimpleTimeLine Activity ActivityActivityからActivityに遷移するための仕組み通常、画面とActivityは一対一なので、画面遷移に用いられる。Intent intent = new Intent(今のActivity,遷移先Activity);intent.putExtra(”key”,”value”);startActivity(intent);
  • QueryActivity.java
  • Intent intent = new Intent(今のActivity,遷移先Activity);intent.putExtra(”key”,”value”);
  • View View PostQuery Twitter for Androidのツイー ActivityActivity (com.twitter.an トするためのPostActivityを droid) 起動することもできる Intent Intent ActivityManager
  • ListView
  • timeline.xml
  • <?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>
  • <?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>
  • SimpleTimeLineActivity.java
  • 値の取り出し TwitterからTL取得 TLをList<String> にListViewにデータをセット
  • Activity レコード毎にデータを Hoge 流し込んでくれる存在 Foo Bar ArrayAdapter List<String>List<String> ・Hoge・Hoge ・Foo・Foo ・Bar・Bar他には、、、SimpleAdapter:Map型をListViewにマッピング
  • ここまでのまとめ
  • QueryActivity SimpleTimeLineActivityonCreate() ButtonClickListener onCreate() onListItemClick() Viewの初期設定 onClick() Intent情報取得 Toast表示 “Send”処理定義 Intent発行 TwitterTL取得 TL情報をAdapterに
  • ここで19:15だと オンスケ
  • ここからが本番
  • カコワルイ
  • ListViewカスタマイズ非同期ネットワークアクセス
  • CustomTimeLineActivity onCreate() onListItemClick() Intent情報取得 詳細画面遷移 TwitterTL取得(非同期) ListView表示(データ無し) onFinishTask() TL情報を独自 Adapterにセット TweetAdapterTwitterTimeline getView() 行 独自にListViewの 表示RequestTask レコード作成 選択doInBackground() (tweet.xmlレイアウト) TL情報を取得 onFinishTask()をコールバック ImageDownloadTask doInBackground() 同期 Cacheを確認 画像 ImageをDL 表示 非同期
  • ListViewカスタマイズ
  • timeline.xml
  • <?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> さっきのまま
  • ArrayAdapter extendsTweetAdapter
  • tweet.xml
  • <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>
  • TweetAdapter.java
  • 1行分のレイアウトをtweet.xmlから生成 tweet.xmlの Screennametextに screenNameを入れる tweet.xmlの tweettextに textを入れる tweet.xmlのimageに 非同期に取得した画像を入れる
  • CustomTimeLine Activity.java
  • 非同期ネットワークアクセス
  • AsyncTask(AsyncTaskLoaderは今回やりません)
  • TwitterTimeLineRequestTask.java
  • 別スレッドで実行される処理GUIスレッドで実行される処理引数はdoInBackgroundの戻り値
  • CustomTimeLine Activity.java
  • ここまでのまとめ
  • CustomTimeLineActivity onCreate() onListItemClick() Intent情報取得 詳細画面遷移 TwitterTL取得(非同期) ListView表示(データ無し) onFinishTask() TL情報を独自 Adapterにセット TweetAdapterTwitterTimeline getView() 行 独自にListViewの 表示RequestTask レコード作成 選択doInBackground() (tweet.xmlレイアウト) TL情報を取得 onFinishTask()をコールバック ImageDownloadTask doInBackground() 同期 Cacheを確認 画像 ImageをDL 表示 非同期
  • ここで19:45だと オンスケ
  • あと少し
  • Tweet.java ・screenName ・text ・date ・image ・ …etcCustomTimeLine TweetDetailActivity Activity Intent
  • Intent 基本的なデータ型しか送信できない。 しかし、Parcelableインタフェースを実 装することによって、Parcelable型で受 け渡しが可能。 Tweet implements Parcelable ・screenName ・text ・date ・image ・ …etc
  • Tweet.java
  • TweetDetailActivity.java
  • tweet_detail.xml
  • TIPS
  • メモリーリーク対策 その1メモリーリークになるときに、DalvikVMに優先的にメモリー解放させることが出来る。SoftReference以外からの参照が無い場合に、解放。
  • DalvikのGCのはなしアクティブじゃないActivityはGC対象になる。状態はシリアライズされる。アクティブになったときはそこから復元される。
  • パフォーマンスアップオブジェクトを生成しない・文字列操作はStringではなく、 StringBufferでやる。・プリミティブ型を使う。 Integer -> int・などなど
  • パフォーマンスアップインタフェース型を利用しない× Map map = new HashMap();○ HashMap map = new HashMap();
  • パフォーマンスアップローカル変数にキャッシュする
  • パフォーマンスアップStaticメソッドを使うオブジェクトのフィールドにアクセスしない場合は、メソッドをStatic化しておく。
  • ここにまとまってますhttp://developer.android.com/guide/practices/design/performance.html
  • DIしたい人RoboGuicehttp://code.google.com/p/roboguice/
  • 課題Twitter4jで戻している値を詳細画面に表示させようー詳細画面に発言者のNameを追加する。(Twitter4j.Statusの中にUserクラスがあって、そのメンバのnameをつかう。