• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
学生向けAndroid勉強会(入門編)
 

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

on

  • 3,673 views

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

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

Statistics

Views

Total Views
3,673
Views on SlideShare
2,730
Embed Views
943

Actions

Likes
8
Downloads
0
Comments
0

5 Embeds 943

http://i2key.hateblo.jp 653
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をつかう。