Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20170804 Builderscon Androidアプリ開発アンチパターン

961 views

Published on

2017年8月4日〜5日で開催されたBuildersconで講演したときの資料だよ♪
Androidのアンチパターン、知ろう♪

Published in: Engineering
  • Be the first to comment

20170804 Builderscon Androidアプリ開発アンチパターン

  1. 1. Androidアプリ開発 アンチパターン 〜 Builderscon 2017〜
  2. 2. @mokelab ● モバイルアプリの 受託開発 ● 技術情報発信 ● グッズ販売
  3. 3. Tech Sheets
  4. 4. 本がでます Androidアプリ開発 74のアンチパターン 初心者〜中級者向けに アプリ開発時の落とし穴を74個紹介 アプリを全く書いたことのない人は 別の本で学んでから!
  5. 5. Q Androidを使ってる?
  6. 6. Q Androidアプリ書いてる?
  7. 7. アプリ開発に 関係ありそうなセッション ● Ionic 3+ではじめる次世代アプリ開発 ○ HTML5だ! ● サーバサイドKotlinのすすめ ○ Kotlinだがサーバサイドだ! ● Serverless Server Side Swift ○ Swiftだがサーバサイドだ! ● LT
  8. 8. アプリ書いてるひと 来ない気がする!
  9. 9. なのに トラックE (イベントホール)
  10. 10. 「知らなかった、 を聞く」
  11. 11. Androidや Androidアプリ開発を 知ろう
  12. 12. なぜ知るの?
  13. 13. Androidアプリ開発には 落とし穴がいっぱい
  14. 14. 知ろう
  15. 15. そして Androidアプリ開発者を 大事にしてあげて
  16. 16. 会話 1 来週からはAndroidアプリ開発やってくれ はい!本を買って開発環境作っておきます! やった!2011年の入門書が100円だった!
  17. 17. アンチパターン 1
  18. 18. アンチパターン 1 Eclipse / ADTを使ってる
  19. 19. アンチパターン 1 プラグインのサポート終了
  20. 20. アンチパターン 1 ライブラリが使いづらい
  21. 21. Androidを知る ライブラリの形式 AndroidはJava → jarをクラスパスに
  22. 22. Androidを知る ライブラリの形式 jarにリソースをいれたい
  23. 23. Androidを知る ライブラリの形式 が jarにはリソース入らない
  24. 24. Androidを知る ライブラリの形式 aar形式!
  25. 25. Androidを知る ライブラリの形式 aar形式 はEclipse/ADTで使えない
  26. 26. アンチパターン 1 解決方法
  27. 27. Androidを知る アクティビティ UIを提供する コンポーネント
  28. 28. Androidを知る アクティビティ
  29. 29. Androidを知る アクティビティ アプリ開発者は Activityを継承した クラスを定義していく
  30. 30. Androidを知る アクティビティ アクティビティは OSからいろんな情報を 受け取る役割
  31. 31. 会話 2 このアプリ、画面回転すると落ちるよ! な、なんとかします! ぐぐったら解決方法あった、やったね!
  32. 32. アンチパターン 2 画面回転の対応が android:confingChanges
  33. 33. Androidを知る 構成変更 画面回転すると落ちる。。
  34. 34. Androidを知る 構成変更 android:configChanges="orientation|screenSize"
  35. 35. アンチパターン 2 たぶん 別の理由で 簡単に落ちます
  36. 36. アンチパターン 2
  37. 37. Androidを知る 構成変更 android:configChangesは 「この変更は 自分でなんとかする」 という意味
  38. 38. アンチパターン 2 解決方法 android:configChangesは よっぽどの理由がない限り 使わない!
  39. 39. アンチパターン 2 解決方法 次のアンチパターンが 根本原因
  40. 40. 会話 3 このアプリ、次の画面いって戻ると 時々落ちるんだけど。。 な、なんとかします! なんでこのフィールド、nullになってるんだろ。。。
  41. 41. アンチパターン 3 アクティビティの復元 考えてない
  42. 42. Androidを知る 復元と再生成 復元?
  43. 43. Androidを知る 復元と再生成 アクティビティオブジェクトは OSが作る
  44. 44. Androidを知る 復元と再生成 アクティビティオブジェクトは よく、破棄される ゴミ箱
  45. 45. Androidを知る 復元と再生成 破棄前に 状態を保存するチャンスを与える Bundle 破棄前の状態
  46. 46. Androidを知る 復元と再生成 必要になったら再生成 破棄前の状態
  47. 47. アンチパターン 3
  48. 48. アンチパターン 3 解決方法 ちゃんとやれ!
  49. 49. アンチパターン 3 解決方法 onSaveInstanceState()で 保存し onCreate()で 復元する!
  50. 50. アンチパターン 3 解決方法 OSが破棄するタイミングは まちまち
  51. 51. アンチパターン 3 解決方法 動作確認はどうやる?
  52. 52. アンチパターン 3 解決方法
  53. 53. 会話 4 ログインAPIを呼ぶと、 アクセストークンもらえるよ どこかに保存しておきます! static変数にいれると、便利そうだな。。
  54. 54. アンチパターン 4 アクセストークンを static変数に入れている
  55. 55. Androidを知る プロセス プロセス=実行の単位
  56. 56. Androidを知る プロセス プロセスで Java VMが起動
  57. 57. Androidを知る プロセス 原則1アプリ=1プロセス
  58. 58. Androidを知る プロセス アクティビティは いろんなアプリで起動 アクティビティA アクティビティB アクティビティC アクティビティD アクティビティE アクティビティAアクティビティA
  59. 59. アンチパターン 4 うちのアプリ 別アプリからは呼ばれないよ?
  60. 60. Androidを知る プロセス static変数の値は プロセスが止まると消える
  61. 61. Androidを知る プロセス プロセスは いきなり止まる
  62. 62. アンチパターン 4 アクティビティの中断
  63. 63. アンチパターン 4 PCアプリは 最小化しても プロセスは死なない
  64. 64. アンチパターン 4 Androidアプリは バックグラウンドにいると プロセスが止められることがある
  65. 65. アンチパターン 4 でも ちゃんと再開できる
  66. 66. アンチパターン 4 ログイン画面 ↓ static変数にトークン保存 ↓ メイン画面 ↓ ホームボタンで中断
  67. 67. アンチパターン 4 ホームボタンで中断 ↓ プロセスが止められる ↓ オーバービューから再開 ↓ メイン画面
  68. 68. アンチパターン 4 解決方法 永続化するか 状態を アクティビティにもたせよう
  69. 69. アンチパターン 4 解決方法 動作確認はどうやる?
  70. 70. アンチパターン 4 解決方法
  71. 71. 会話 5 UIはフラグメントで作って! はい、やってみます! あれ、importしようとしたら2つでてきた。。 こっちでいいかな。。
  72. 72. アンチパターン 5 android.app.Fragment
  73. 73. Androidを知る フラグメント ビューの生成と管理
  74. 74. Androidを知る フラグメント アクティビティは UIを提供するコンポーネント
  75. 75. Androidを知る フラグメント アクティビティは 忙しい
  76. 76. Androidを知る フラグメント ビューの生成と管理を アクティビティから引き離す アクティビティ フラグメント コンポーネント担 当 ビュー生成管理 担当
  77. 77. アンチパターン 5 android.app.Fragment android.support.v4.app.Fragment
  78. 78. アンチパターン 5 android.app.Fragment →プラットフォームで提供 android.support.v4.app.Fragment →サポートライブラリで提供
  79. 79. アンチパターン 5 プラットフォームで提供される クラス→OSバージョンに縛られる
  80. 80. アンチパターン 5 サポートライブラリ版は 更新すれば新しい機能が使える!
  81. 81. アンチパターン 5 解決方法 お願いですから サポートライブラリ版を 使って!
  82. 82. 会話 6 テキスト入力してもらって、その結果を 呼び出し元に伝えるフラグメント作って! はい、やってみます! 伝えるためにコールバックオブジェクトを もらえばいいかな。。。?
  83. 83. アンチパターン 6 フラグメントでの 処理結果を インターフェース経由で 伝えている
  84. 84. アンチパターン 6 フラグメント A フラグメント B テキスト入力欄 表示してよ 入力されたの これだよ
  85. 85. アンチパターン 6 NextFragment next = new NextFragment(); next.setCallback(new Callback() { … });
  86. 86. アンチパターン 6 NextFragment表示中に 中断すると?
  87. 87. アンチパターン 6 コールバックオブジェクトは 復元できない!
  88. 88. アンチパターン 6 解決方法 setTargetFragment()を 使ってみよう
  89. 89. アンチパターン 6 解決方法 NextFragment next = new NextFragment(); next.setTargetFragment(this, REQUEST1);
  90. 90. アンチパターン 6 解決方法 getTargetFragment()で 呼び出し元がとれる! Fragment caller = getTargetFragment(); caller.onActivityResult( … );
  91. 91. 会話 7 このiOSアプリのAndroid版作ってよ! はい、やってみます! 見た目とかもiOS版のままで作ればいいよね
  92. 92. アンチパターン 7 見た目や操作感が iOSそのまんま
  93. 93. アンチパターン 7
  94. 94. アンチパターン 7
  95. 95. アンチパターン 7
  96. 96. アンチパターン 7 下タブがダメとはいえない
  97. 97. アンチパターン 7 トップレベル項目が2つなら 別の表現で!
  98. 98. アンチパターン 7 横スクロールしないのに >
  99. 99. アンチパターン 7 解決方法 まずは マテリアルデザインに したがってみよう
  100. 100. アンチパターン 7 解決方法 Androidユーザーは 他のAndroidアプリを触ってる
  101. 101. アンチパターン 7 解決方法 あなたの iOS版は触っていない!
  102. 102. アンチパターン 7 解決方法 ガイドラインは ユーザーのためにある
  103. 103. まとめ! Androidアプリ開発には アンチパターンたくさん
  104. 104. まとめ! 解決方法を知れば 回避は簡単
  105. 105. まとめ! 知ろう!
  106. 106. まとめ! その他のアンチパターンは 本を買ってね♪
  107. 107. Thanks!

×