【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
-
Upload
hiroyuki-kusu -
Category
Technology
-
view
16.474 -
download
0
Transcript of 【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
初学者に嬉しいAndroid開発環境
(あとMVCとか)
Hiroyuki Kusu ( @hkusu_ )株式会社ゆめみ
2015/4/25 DroidKaigi
自己紹介
・元々はサーバサイドエンジニア
・SE職/マネジメント職が長かった(最近、技術職にもどった)
・Android はそれほど長くない
・ほかには JavaScript などをやっていきたい(希望)
アウトライン
①環境・ライブラリ
②アプリケーション構成(MVC)
③学習リソース
※前提として、ゲームやハードウェア/OS機能を使うものではなく、WEBサービス的な Android アプリの開発
アウトライン
①環境・ライブラリ
②アプリケーション構成(MVC)
③学習リソース
環境
・いまからやるなら Android Studio 一択
・JetBrains 社製。WebStorm、RubyMine らと同じ感触でさわれる
・iOS 用は AppCode というのがある
・補完とかリファクタ機能とかもすごい
・Gradle 便利(らしい)
IDE
何も設定しなくてもAndroid Studio がいろいろ教えてくれる
困ったら [shift] キー2回押し
・Genymotion を使う・VirtualBox 上で動くので速い
・Android Studio 用のプラグインあわせて
シミュレータ
ライブラリ
・レイアウトXML上のViewとの関連づけ
・Viewのインベント取得
Butter Knife
Android Studio 用のプラグイン
・手間が減るというより、Fragmentクラスの冒頭に利用するViewが定義されるというコードスタイルが視覚的に分かりやすい
・リスナーをセットする煩雑なコードが減る
・他には AndroidAnnotations がある・もっと色々できる(ただ、できすぎて初学者は混乱するかも)
https://github.com/greenrobot/EventBus から転載
EventBus
・アプリケーション内の任意のインスタンスに任意の通知を送れる
・データも詰め込め、スレッドも飛び越える
・通知を受け取る側が死んでいてもアプリは落ちない
・イベントを送る側
・インベントを受け取る側
・WEB-API を叩いて結果を受け取る場合
・画像の読み込みは Picasso を利用する
Retorofit OkHttp Gson
・データを保存する必要がある場合
・SQL は直に書かずに Active Android を使う
・ほかには Realm・SQLiteではなく独自データストア
ORM
アウトライン
①環境・ライブラリ
②アプリケーション構成(MVC)
③学習リソース
MVC構成が分かりやすく、破綻しないと思う
Model
View Controller① GUIイベント
③描画依頼
④データ取り出し②モデル操作・更新
データの保持&ビジネスロジック
(WEB-APIを発行するのはModel)
Model
View Controller① GUIイベント
③描画依頼
Fragment(or Activity)
レイアウトXMLView、ViewGroupクラス
③④はControllerを経由する
Androidの場合
②モデル操作・更新
データの保持&ビジネスロジック
(WEB-APIを発行するのはModel)
④データ取り出し
普通のJavaクラス
Model
View Controller① GUIイベント
②モデル操作・更新
③描画依頼
Fragment(or Activity)
普通のJavaクラス
③④はControllerを経由する
Androidの場合
Event Bus
ORM
Retrofit 等
Butter Knife
データの保持&ビジネスロジック
(WEB-APIを発行するのはModel)
レイアウトXMLView、ViewGroupクラス
④データ取り出し
Model (普通のJavaクラス)
・データの保持(変数)とデータの操作メソッド
・Controller からこちらに追い出す
・イベント取得やViewパーツの操作はしない
Fragment
Fragment
Fragment
Model
長寿
短命
インスタンスの参照
WEB-APIの発行など
複数の画面で使いまわす場合や、時間がかかる処理をある場合
・長寿の Model はシングルトンに
・インスタンスの参照の取得
・データ構造を表現するクラス(Entity)を用意しておく
・Modelで扱うListデータの要素とする
・ORM(Active Android、Realm)や Gson を利用する場合は、それらが提供するものを使う
Model
View Controller① GUIイベント
②モデル操作・更新
③描画依頼
④データ取り出し
データの保持&ビジネスロジック
(WEB-APIを発行するのはModel)
Fragment(or Activity) のコード
・Model側では、データが変更されたら EventBus のイベントを投げるようにしておく
・Fragment(or Activity)では、Model のデータで viewの表示を洗い替えるようなメソッドを用意
⇒Model が更新されたら自動的にview が更新される
コールバックしたり Observable を使ってもよいが..
・コールバックはコールバック先が落ちている可能性がある
・Fragment(or Activity)なら尚更
・Observable より EventBus 使った方が楽
View レイアウトXML、View、ViewGroup
・クラスを作るときはイベントは処理させない
・それは Controller の仕事
・レイアウトXMLにもイベントに関するものは定義しない(onClick など)
・(できるだけ)コードでViewの生成や設定は行わない
Controller Fragment (Activity)
Activity
Activity
Activity
Activity
画面遷移的なものは Activity をインテントで切り替えるのではなくて、
Activity
Fragment
Fragment
Fragment
Fragmentを切り替える(その方が楽)※ただしアプリケーションによる
コンテナ
・アプリケーションに Activity はひとつ
・画面1つに対して Fragment はひとつ(ただしパーツの再利用やタブレット向けの場合は
その限りではない)
・Fragment on Fragment はできればやらない
Fragment が肥大化する問題
・目安として500行〜1000行を超えてきたら?
・Fragment をサブ Controller やサブ Modelへ分割する
・Adapter 類はインナークラスから追い出す
Fragment サブ Controller クラス
new して利用
・Java 的に通常のクラス(not Fragment)
・Fragmentと同名のライフサイクルメソッドを実装して操作する
・イベント取得やViewパーツの操作含めて良い
・呼び出し元の Fragment と同じ寿命
サブ Controller への分割
Fragment サブ Model クラス
new して利用
・データとビジネスロジック
・イベント取得やViewパーツの操作含めてはダメ
・これも呼び出し元の Fragment と同じ寿命
サブ Model への分割
https://github.com/hkusu/android-mvc-sample
だいたいここまでの構成でサンプルを作った。
アウトライン
①環境・ライブラリ
②アプリケーション構成(MVC)
③学習リソース
書籍
・AndroidエンジニアのためのモダンJavahttp://www.amazon.co.jp/dp/477415878X
・Java未経験者向け。とりあえずこれ一冊でも十分
・Java言語で学ぶデザインパターン入門http://www.amazon.co.jp/dp/4797327030
・EFFECTIVE JAVAhttp://www.amazon.co.jp/dp/4621066056
書籍(Java)
書籍(Android)
・AndroidStudioではじめるAndroidプログラミング入門http://www.amazon.co.jp/dp/4798041025
・Androidプログラミングバイブルhttp://www.amazon.co.jp/dp/4883378063
・Android SDK逆引きハンドブックhttp://www.amazon.co.jp/dp/486354104X
書籍(Android:UI)
・Android Pattern Cookbookhttp://www.amazon.co.jp/dp/4844335650
・Android UI Cookbook for 4.0 ICShttp://www.amazon.co.jp/dp/4844331744
・Android Layout Cookbookhttp://www.amazon.co.jp/dp/4844329871
参考になるソース
Android Studio のプロジェクト作成時の雛形
Android Studio で自動生成できる Fragment の雛形
GitHub(https://github.com/googlesamples)で公開されているものと同じ
Googleのサンプル
・まずはドットインストール・mixiさんのトレーニング資料は慣れてきてから見る
(初学者には少し敷居がある)
・ハードウェアやOSまわりの機能は後回し(必要になったら調べる、ぐらいの感覚で)
・通信、SQLiteまわりはライブラリを使う前提で(生で書く機会はそんなにない、と思う)
・端末の向きを固定(回転させない)(Activity や Fragment のライフサイクルや状態の保存がややこしくなる)
・タブレットの2ペインレイアウトやらない(1画面1Fragmentが最初はやりやすい)
初学者向けの学習方法
おわり
以降、予備スライド
Applicationクラス
・初期化処理やインスタンスの参照の保持に
・ここで参照してるとGCされないので注意
・レイアウトに関する固定値は、教科書どおり res フォルダ配下の XML で管理する
・ロジックに関するものは普通に固定値クラスを作って public static final で定義する
・その Fragment でのみ利用するものはその Fragmentに書いてもよいと思う
固定値
動的に生成するものは static メソッドを用意する
・便利関数的なものは、それ用のクラスを作り、static なメソッドを定義する
・手続き型言語の関数的なものなので、このクラスでは状態は保持しない
Utility系の便利関数
Activity、Fragment 内では、他の Activity、Fragment のインスタンスの参照を取得できるようになっていてる
参照さえ取得してしまえば、そのインスタンス(Activity、Fragment)のメソッドを実行できる
独自のリスナークラスを作成して利用すると、匿名クラスの定義でコードが煩雑になるのを防ぎ、また再利用や値の保持(コンストラクタで渡す)ができる