DroidKaigiメモ

#DroidKaigi


DroidKaigiのメモを共有します｡ 

##ウェルカムトーク&基調講演

[スライド] (http://www.slideshare.net/mhidaka/droidkaigi-welcome-talk)
[スライド] (http://www.slideshare.net/yanzm/droid-kaigi2015-yanzm)

- 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()をしない｡

##開発を効率的に進められるまでの道のり

[スライド] (http://www.slideshare.net/TakaoSumitomo/ss-47393000)

- アプリの開発を効率化について  テスト`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開発環

[スライド] (http://www.slideshare.net/hiroyukikusu/droidkaigi2015androidmvc)

- いまはじめるならAdnroidStudio シフト2度押しシミュレータGenymotionを使う
- ライブラリ ButterKnife  View､リスナプラグインもある｡  コードスタイルがわかりやすい
- リスナのセットもらくにできる

- EventBus  任意のインスタンス任意の通知をおくる｡  通知をける側が死んでてもOK
- `Retrofit` `OkHttp` `Gson` 画像読み込みPiccaso
- ORM `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のサンプル.

##大容量データのダウンロード戦略

[スライド] (https://speakerdeck.com/misyobun/da-rong-liang-detafalsedaunrodozhan-lue)

- MBタイルズ｡
- DownloadManager  お手軽｡Notificationでも確認できる｡ アプリの仕様で使えない場合がある｡
- DonloadManagerをつくる｡
- ContentProvider  ダウンロードの状態を保存する｡
- Service 非同期でダウンロードを実行する｡
- ユーザが確認する術があることが大切｡
- サービスでNotificationを表示する｡
- プロセスを分ける｡安全にウンロードできる｡ Activityが死んでも続けられる｡
- IntentService:ワーカースレッド､シリアル処理､単一ファイルをダウンロード
- Service 複数のファイルを同時にウンロード
- Serviceの生死 プロセス名で確認する｡
- onTaskRemove は機種によってよばれない
- シングルスレッドでやったほうが速い
- Threadをふやすと少しは速くなる｡ DawnloadManagerでは5Thread使っている｡ Volleyは4Thread｡
- ストレージに書き込む｡ 書き込む前にFileioをつくっておく｡
- BufferdOutputStreamの数を調整する｡
- でかいファイルなら単一スレッドでもいい


##新言語KotlinでAndoidプログラミング

[スライド] (https://speakerdeck.com/ntaro/xin-yan-yu-kotlindeandroidpuroguramiingu)

- try.kotlinlang.orgでコードを公開
- Kotlinとは BettrJava JetBrainsにより発表｡ 静的片付けオブジェクト指向言語｡ 簡単､安全｡  
- JAvaとの比較｡ トップレベルに置ける｡  型推論｡コンストラクタがのままプロパティになる｡ゲッタ､セッタはいらない｡  ラムダ式が使える｡  高階関数でコレクションを扱える｡  拡張関数staticメソッドをつくれる｡  null安全のサポート。
- Androidpログラミング  KotterKnifeというライブラリがある
- Anko レイアウトをくむDSL

##Bitmapはこわくない

[スライド] (https://speakerdeck.com/wasabeef/android-bitmaphabu-kunai)

- 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を書くことでできる改善しやすいアプリ開発

[スライド] (https://speakerdeck.com/yulily100/tesainakaxmlwoshu-kuahurikai-fa-huro)

- インタビュー､ペーパープロトタイピング エンジニアとやった｡  機能の実装を把握できる｡  
- 簡単なモックをつくる｡
- エンジニアがつくる｡
- デザイナがスタイルを当てる｡
- 何がいいのか｡  試行錯誤できる｡  モックと実際の実装を一緒に考えられる｡  実際に動くものを触りながら作れる｡  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を取り入れたデザインリニューアル

[スライド] (http://www.slideshare.net/yuki930/ss-47398513)

- 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メソッドは書く｡
- 継承は見通しが悪くなる場合がある｡