LoginSignup
20
20

More than 5 years have passed since last update.

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、TravisClCircleClで自動化 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 画像読み込み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のサンプル.

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

スライド

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20