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.
Androidアプリ開発
アンチパターン
〜 Builderscon 2017〜
@mokelab
● モバイルアプリの
受託開発
● 技術情報発信
● グッズ販売
Tech Sheets
本がでます
Androidアプリ開発
74のアンチパターン
初心者〜中級者向けに
アプリ開発時の落とし穴を74個紹介
アプリを全く書いたことのない人は
別の本で学んでから!
Q
Androidを使ってる?
Q
Androidアプリ書いてる?
アプリ開発に
関係ありそうなセッション
● Ionic 3+ではじめる次世代アプリ開発
○ HTML5だ!
● サーバサイドKotlinのすすめ
○ Kotlinだがサーバサイドだ!
● Serverless Server Side Swift...
アプリ書いてるひと
来ない気がする!
なのに
トラックE
(イベントホール)
「知らなかった、
を聞く」
Androidや
Androidアプリ開発を
知ろう
なぜ知るの?
Androidアプリ開発には
落とし穴がいっぱい
知ろう
そして
Androidアプリ開発者を
大事にしてあげて
会話 1
来週からはAndroidアプリ開発やってくれ
はい!本を買って開発環境作っておきます!
やった!2011年の入門書が100円だった!
アンチパターン 1
アンチパターン 1
Eclipse / ADTを使ってる
アンチパターン 1
プラグインのサポート終了
アンチパターン 1
ライブラリが使いづらい
Androidを知る
ライブラリの形式
AndroidはJava
→ jarをクラスパスに
Androidを知る
ライブラリの形式
jarにリソースをいれたい
Androidを知る
ライブラリの形式
が
jarにはリソース入らない
Androidを知る
ライブラリの形式
aar形式!
Androidを知る
ライブラリの形式
aar形式
はEclipse/ADTで使えない
アンチパターン 1
解決方法
Androidを知る
アクティビティ
UIを提供する
コンポーネント
Androidを知る
アクティビティ
Androidを知る
アクティビティ
アプリ開発者は
Activityを継承した
クラスを定義していく
Androidを知る
アクティビティ
アクティビティは
OSからいろんな情報を
受け取る役割
会話 2
このアプリ、画面回転すると落ちるよ!
な、なんとかします!
ぐぐったら解決方法あった、やったね!
アンチパターン 2
画面回転の対応が
android:confingChanges
Androidを知る
構成変更
画面回転すると落ちる。。
Androidを知る
構成変更
android:configChanges="orientation|screenSize"
アンチパターン 2
たぶん
別の理由で
簡単に落ちます
アンチパターン 2
Androidを知る
構成変更
android:configChangesは
「この変更は
自分でなんとかする」
という意味
アンチパターン 2
解決方法
android:configChangesは
よっぽどの理由がない限り
使わない!
アンチパターン 2
解決方法
次のアンチパターンが
根本原因
会話 3
このアプリ、次の画面いって戻ると
時々落ちるんだけど。。
な、なんとかします!
なんでこのフィールド、nullになってるんだろ。。。
アンチパターン 3
アクティビティの復元
考えてない
Androidを知る
復元と再生成
復元?
Androidを知る
復元と再生成
アクティビティオブジェクトは
OSが作る
Androidを知る
復元と再生成
アクティビティオブジェクトは
よく、破棄される
ゴミ箱
Androidを知る
復元と再生成
破棄前に
状態を保存するチャンスを与える
Bundle
破棄前の状態
Androidを知る
復元と再生成
必要になったら再生成
破棄前の状態
アンチパターン 3
アンチパターン 3
解決方法
ちゃんとやれ!
アンチパターン 3
解決方法
onSaveInstanceState()で
保存し
onCreate()で
復元する!
アンチパターン 3
解決方法
OSが破棄するタイミングは
まちまち
アンチパターン 3
解決方法
動作確認はどうやる?
アンチパターン 3
解決方法
会話 4
ログインAPIを呼ぶと、
アクセストークンもらえるよ
どこかに保存しておきます!
static変数にいれると、便利そうだな。。
アンチパターン 4
アクセストークンを
static変数に入れている
Androidを知る
プロセス
プロセス=実行の単位
Androidを知る
プロセス
プロセスで
Java VMが起動
Androidを知る
プロセス
原則1アプリ=1プロセス
Androidを知る
プロセス
アクティビティは
いろんなアプリで起動
アクティビティA
アクティビティB
アクティビティC
アクティビティD アクティビティE
アクティビティAアクティビティA
アンチパターン 4
うちのアプリ
別アプリからは呼ばれないよ?
Androidを知る
プロセス
static変数の値は
プロセスが止まると消える
Androidを知る
プロセス
プロセスは
いきなり止まる
アンチパターン 4
アクティビティの中断
アンチパターン 4
PCアプリは
最小化しても
プロセスは死なない
アンチパターン 4
Androidアプリは
バックグラウンドにいると
プロセスが止められることがある
アンチパターン 4
でも
ちゃんと再開できる
アンチパターン 4
ログイン画面
↓
static変数にトークン保存
↓
メイン画面
↓
ホームボタンで中断
アンチパターン 4
ホームボタンで中断
↓
プロセスが止められる
↓
オーバービューから再開
↓
メイン画面
アンチパターン 4
解決方法
永続化するか
状態を
アクティビティにもたせよう
アンチパターン 4
解決方法
動作確認はどうやる?
アンチパターン 4
解決方法
会話 5
UIはフラグメントで作って!
はい、やってみます!
あれ、importしようとしたら2つでてきた。。
こっちでいいかな。。
アンチパターン 5
android.app.Fragment
Androidを知る
フラグメント
ビューの生成と管理
Androidを知る
フラグメント
アクティビティは
UIを提供するコンポーネント
Androidを知る
フラグメント
アクティビティは
忙しい
Androidを知る
フラグメント
ビューの生成と管理を
アクティビティから引き離す
アクティビティ フラグメント
コンポーネント担
当
ビュー生成管理
担当
アンチパターン 5
android.app.Fragment
android.support.v4.app.Fragment
アンチパターン 5
android.app.Fragment
→プラットフォームで提供
android.support.v4.app.Fragment
→サポートライブラリで提供
アンチパターン 5
プラットフォームで提供される
クラス→OSバージョンに縛られる
アンチパターン 5
サポートライブラリ版は
更新すれば新しい機能が使える!
アンチパターン 5
解決方法
お願いですから
サポートライブラリ版を
使って!
会話 6
テキスト入力してもらって、その結果を
呼び出し元に伝えるフラグメント作って!
はい、やってみます!
伝えるためにコールバックオブジェクトを
もらえばいいかな。。。?
アンチパターン 6
フラグメントでの
処理結果を
インターフェース経由で
伝えている
アンチパターン 6
フラグメント
A
フラグメント
B
テキスト入力欄
表示してよ
入力されたの
これだよ
アンチパターン 6
NextFragment next = new NextFragment();
next.setCallback(new Callback() {
…
});
アンチパターン 6
NextFragment表示中に
中断すると?
アンチパターン 6
コールバックオブジェクトは
復元できない!
アンチパターン 6
解決方法
setTargetFragment()を
使ってみよう
アンチパターン 6
解決方法
NextFragment next = new NextFragment();
next.setTargetFragment(this, REQUEST1);
アンチパターン 6
解決方法
getTargetFragment()で
呼び出し元がとれる!
Fragment caller = getTargetFragment();
caller.onActivityResult( … );
会話 7
このiOSアプリのAndroid版作ってよ!
はい、やってみます!
見た目とかもiOS版のままで作ればいいよね
アンチパターン 7
見た目や操作感が
iOSそのまんま
アンチパターン 7
アンチパターン 7
アンチパターン 7
アンチパターン 7
下タブがダメとはいえない
アンチパターン 7
トップレベル項目が2つなら
別の表現で!
アンチパターン 7
横スクロールしないのに >
アンチパターン 7
解決方法
まずは
マテリアルデザインに
したがってみよう
アンチパターン 7
解決方法
Androidユーザーは
他のAndroidアプリを触ってる
アンチパターン 7
解決方法
あなたの
iOS版は触っていない!
アンチパターン 7
解決方法
ガイドラインは
ユーザーのためにある
まとめ!
Androidアプリ開発には
アンチパターンたくさん
まとめ!
解決方法を知れば
回避は簡単
まとめ!
知ろう!
まとめ!
その他のアンチパターンは
本を買ってね♪
Thanks!
20170804 Builderscon Androidアプリ開発アンチパターン
20170804 Builderscon Androidアプリ開発アンチパターン
20170804 Builderscon Androidアプリ開発アンチパターン
20170804 Builderscon Androidアプリ開発アンチパターン
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

4

Share

Download to read offline

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

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

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!
  • YoshikiHishikawa

    Aug. 12, 2019
  • HiroyukiShiotsuka

    Dec. 2, 2018
  • AsatoImanishi

    Jan. 10, 2018
  • nakayamayoshiki1

    Aug. 4, 2017

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

Views

Total views

1,451

On Slideshare

0

From embeds

0

Number of embeds

480

Actions

Downloads

4

Shares

0

Comments

0

Likes

4

×