DroidKaigi
DroidKaigiのメモを共有します。
ウェルカムトーク&基調講演
- 8分でチケット売り切れ
21セッション
Activity Fragmentの使い分け
~2.2 2008 コンタクトアプリファイル数 26
~4.3 アプリベンチャー ファイル数 269
5.x インフラ化の時代 MaterialDesign ファイル数 300 リソースは増えた→すべてをActivityにかけない。Activityのテストがしにくい 過去にかいたコードを変更しなければならない。 Activity、Fragment、CustomViewに特徴と役割。 Fragmentではまらないポイント
画面管理処理 FragmentはActivityよりのもの。
CustomViewパターン Viewを組み合わせたViewGroup 独自ルールでViewを配置する 独自の計算でサイズが決まる。独自の見た目のView。 OrientationはActivity特有。 Fragment in Fragment はActivityにAttachされる。 Fragmentは画面回転でインスタンスを保持できる。 CustomViewは描画できる。 ViewPagerでフラグメントごとにmenuを分けたいときはFragmentにmenuを実装する。
FragmentをCustomViewで置き換えるのは厳しい。 Viewにadd/removeで画面の切替をすることは可能。 ライブラリの対応
lean-back-v17
学習コストが高い。CustomView パーツとして利用
Fragment CustomViewでできないことをする。
Activity スクリーンに関連すること。
CustomViewにデータの保持機構を持たせる BaseSavedStateを継承。 CompoundButtonが参考になる CustomViewで画像のチェックもできる。 バリデーションもCustomViewに内包する。
ネットワークDB処理なのは別クラスにわける。
Fragment setRetainInstance()をもちいる。 Fragmentへのコールバック setTargetFragment()を使う。 FragmentでstartActivity()をしない。
Fragment in Fragment。 Leaderを使ってはならない。 chidlFragmentでstartActivityForResult()をしない。
開発を効率的に進められるまでの道のり
- アプリの開発を効率化について テスト
Junit
を使う。Jenkins、TravisCl
、CircleCl
で自動化DeployGate
でテスト版配布。 - 要件一覧表の1項目1テストを書く。
- 開発途中からテストを導入する。 外部依存する箇所にDIを入れる。 通信処理。 データベース。 プリファレンス。 グローバル変数を取る。 シングルトンを取る。投げっぱなしのスレッドを止める。 インタフェースをかます。
Dagger
などのDIALOGライブラリを使う。 - SharedPrefarenseの差し替え SharedPrefarenceFactoryをつくる。シングルトン
- SQLite RenamingDeligationContext SQLOpenHelperにcontext=nullを渡す。
- 通信処理 偽の通信データはandroidTestのassetsに入れる。
- テストを書く。 コンバージョンにつながることは重点的にログウイン周り、ユーザのプロフィール入力
- データベース InstrumentationTestCaseを使う
- Activity ActivityInstrumentationTestCase2が使える
- ツール、ライブラリ
- JUnit4
- Espresso
- Moskito
- Crashlytics
- connectedAndroidtest
- createcoverageTest
落ちないアプリの作り方
- サーバは同期処理。 クライアントアプリは非同期
- Crashlytics
- FragmentTransactionの取り扱いミス ライフサイクルの終わったコントローラへの不正なアクセス out of memory. 再生成、復元
- onSaveInstanceState onRestoreInstatnceState
- Avtivityを保持しないにチェックする。
- 非同期ライブラリ 非同期がActiviyより長生きする
AsyncTast 画面回転で結果を引き継げない。 static classにする。 コールバック
EventBus オブザーバパタン
Context ApplicationContext ActivityContext ActivityContextが長く参照されるとメモリリークする。 ApplicationContextを使えるなら使う。
初学者に嬉しいAndroid開発環
- いまはじめるならAdnroidStudio シフト2度押しシミュレータGenymotionを使う
- ライブラリ ButterKnife View、リスナプラグインもある。 コードスタイルがわかりやすい
リスナのセットもらくにできる
EventBus 任意のインスタンス任意の通知をおくる。 通知をける側が死んでてもOK
Retrofit
OkHttp
Gson
画像読み込みPiccasoORM
ActiveAndroid
Realm
NoSqlアプリケーション構成 MVCでいたほうがいい。
View: XML
Controller:Activity、Fragment
Model:javaコード
ModelからViewはEventBusをつかう。
長寿のModelはシングルトンでつくる。
Modelが更新されたらFragmentにEventBusでううちいてViewを更新する。
コードでのView生成はおこなわない。
Fragmentが肥大化した時は普通のjavaクラスに分ける。
学習リソース
AndroidエンジニアのためのJava
デザインパターン、 Effectivejava、
AndroidStudioの否型が参考になる。 Googleのサンプル.
大容量データのダウンロード戦略
- MBタイルズ。
- DownloadManager お手軽。Notificationでも確認できる。 アプリの仕様で使えない場合がある。
- DonloadManagerをつくる。
- ContentProvider ダウンロードの状態を保存する。
- Service 非同期でダウンロードを実行する。
- ユーザが確認する術があることが大切。
- サービスでNotificationを表示する。
- プロセスを分ける。安全にウンロードできる。 Activityが死んでも続けられる。
- IntentService:ワーカースレッド、シリアル処理、単一ファイルをダウンロード
- Service 複数のファイルを同時にウンロード
- Serviceの生死 プロセス名で確認する。
- onTaskRemove は機種によってよばれない
- シングルスレッドでやったほうが速い
- Threadをふやすと少しは速くなる。 DawnloadManagerでは5Thread使っている。 Volleyは4Thread。
- ストレージに書き込む。 書き込む前にFileioをつくっておく。
- BufferdOutputStreamの数を調整する。
- でかいファイルなら単一スレッドでもいい
新言語KotlinでAndoidプログラミング
- try.kotlinlang.orgでコードを公開
- Kotlinとは BettrJava JetBrainsにより発表。 静的片付けオブジェクト指向言語。 簡単、安全。
- JAvaとの比較。 トップレベルに置ける。 型推論。コンストラクタがのままプロパティになる。ゲッタ、セッタはいらない。 ラムダ式が使える。 高階関数でコレクションを扱える。 拡張関数staticメソッドをつくれる。 null安全のサポート。
- Androidpログラミング KotterKnifeというライブラリがある
- Anko レイアウトをくむDSL
Bitmapはこわくない
- inJustDecodeBounds 予め画像サイズを取得する。
- inSampleSize Filterをかけるときに便利
- Picasso .fit() .centerCrop() Viewのサイズで切り出せる。
- Glide GIFを読み込める。 サムネイル機能をつかえる。 %表示で読み込んでくれる。
- 一旦Bitmapを取るときはPicassoを用いる。
- 読み込む前に画像を加工できる。
- Buler RenderScript
- Transform用のライブラリもある。
- GPUImage for Android
- Fresco XMLで指定できる。 dpを指定しなければならない。
- 最後の手段:
LargeHeap
モバイルにおける電力最適化の1プラクティス。
- Project Volta, Battery Historian
- パワースカウター ダミーバッテリをつかって電力を測定する。
- バッテリが満タンだとデバイスを動かすのに使われる。
- Chrome 平均2.7W YouTube 2.0W GoogleMap 3.7W
- 動画再生は意外と電気を食わない。
- WebViewは消費電力が多い。
- AndroidWere WatchFace SampleAnalog 0.36W
- 操作を始めて10秒で安定する。
- 単純な図形なら描画するべき。
デザイナがMLを書くことでできる改善しやすいアプリ開発
- インタビュー、ペーパープロトタイピング エンジニアとやった。 機能の実装を把握できる。
- 簡単なモックをつくる。
- エンジニアがつくる。
- デザイナがスタイルを当てる。
- 何がいいのか。 試行錯誤できる。 モックと実際の実装を一緒に考えられる。 実際に動くものを触りながら作れる。 LEANな開発ができる。Scrum + Userability
- ユーザにどんな価値を与えられるかを単位として決める。
- テストが全て。 2週間でPlannin, development, testを繰り返す。
- 計画が進んでいるか遅れているかがわかる。
- CSSの知識とAndroidStudioの補完、 エンジニアのサポート。
- ユーザが実際に使うアプリで開発できる。
JellybeansとKitkatで実現するマテリアルデザイン
- バージョンのシェアではKitkatとJellyBeansが多い
- SupportLibraryを使う。
- appCompatを適用する。 ブランドカラーの設定。 Primary, PrimaryDark, Accent
- appCompatActivityを使う。 メソッドも追加されている。
- AlertDialogもマテリアルにきる。 メソッドで追加できる。
- Toolbar, DrawerLayoutを使う。 実装のしかたが少し変化している。
- KitKat限定でStatusBArの色を変えられる。 Toolbarにpaddingを設定する
- Interpolator サポートv4で追加された。
MaterialDesignを取り入れたデザインリニューアル
- Material Design on Android Checklist
- An eploration in Material Design
- 公式動画
- UIパターンの調査。
- 既存ユーザには使いにくい。 手間が増えた。 バッチが見えない。
- カラーパレットを作成。 行間やフォントサイズを調整。 日本語のサイズもできた。
- Sticker Sheet
- アイコン作成 IcoMoonでアイコンをフォント化 jsonファイルを利用すれば共有もらく
- カラー定義 カラーコードはXMLで管理する。 定数も最初に定義しておく。
- textAppearanceを活用
- Fragment化していく ViewPagerはFragmentが便利。
- Retrofit APIの仕様をかく。
- RxJava 順次処理をける
- Calligraphy TextViewを拡張して外部フォントを見込み可能にする。
- Androidの進化はチャンス。
- ドキュメント整理。 CONTRIBUTION.md を使う。
- Javadocを書くクラスとpublicメソッドは書く。
- 継承は見通しが悪くなる場合がある。