ABC2016Spring Androidアプリ実装アンチパターン(暫定)
-
Upload
mokelab -
Category
Technology
-
view
3.539 -
download
0
Transcript of ABC2016Spring Androidアプリ実装アンチパターン(暫定)
Androidアプリ実装 アンチパターン
ABC 2016 Spring
1
自己紹介
深見浩和
@fkmモケラボ株式会社 代表
普段は、Android/iOSアプリの受託開発や
エンジニア支援を
やっています
2
本発表の対象
初心者
中級者
達人
3
アプリを開発する
技術って?
4
攻めの技術
● Design library● HTTP通信● Bluetooth● センサー● Realm● Reactive
5
守りも大切
● クラッシュしない● 動作が早い● 情報漏洩しない● メンテナンス容易
6
Androidアプリ実装には
アンチパターンがたくさん
7
Fragmentを一切使わない
アンチパターン その1
8
アンチパターン その1
showDialog()はdeprecated
9
アンチパターン その2
android.app.Fragmentを
使っている
10
アンチパターン その2
support-v4版を使ったほうがきっとしあわせ
android.app.Fragmentの進化の歴史
API Level 増えたメソッド数
15 2つ
16 2つ
17 3つ
21 18つ
23 8つ
N Preview 2つ
11
Fragment内にFragmentを貼る時に
getFragmentManager()を使っている
アンチパターン その3
12
アンチパターン その3
getChildFragmentManager()が正しい。
Activity/Fragment復元時に落ちたり、
正しく復元されなかったりします。
※android.app.Fragmentでは、API Level 17
13
アンチパターン その4
FragmentのonCreate()でActivityのフィールドに
アクセスしている
(onCreateView()も同じ)
14
アンチパターン その4
たとえばこんな設計
Activity Fragment
ユーザー情報を保持
参照
15
アンチパターン その4
復元時はsuper.onCreate()でFragmentのonCreate()を呼ぶから
16
アンチパターン その4
onActivityCreated()の時点でアクセスするのが正しい
17
アンチパターン その5
ActivityのonRestoreInstanceState()で
状態を復元している
18
アンチパターン その5
メソッド名にだまされてはいけない
onRestoreInstanceState()は、
onStart()の後に呼ばれる
つまり、onActivityCreated()の後。
19
アンチパターン その5
Activityの復元は、特に問題ない場合は
onCreate()でやりましょう。
(と、実はAndroidのドキュメントにも書いてある。。。)
20
アンチパターン その6
Fragment初期化時に
Callbackを渡している
21
アンチパターン その6
例:入力が終わったら呼び出し元に伝えたい
fragment.setCallback(new InputCallback() { @Override public void done(String text) { // 入力が完了したときの処理
}});tr.replace(R.id.container, fragment);tr.commit();
22
アンチパターン その6
中断や画面回転などで
間違いなく
クラッシュします!
23
アンチパターン その6
setTargetFragment() + onActivityResult()
// 呼び出し元のFragment(=this)を渡す
fragment.setTargetFragment( this, REQUEST_NAME_INPUT);tr.replace(R.id.container, fragment);tr.commit();
24
アンチパターン その6
// 入力が終わったので呼び出し元に伝える
Fragment caller = getTargetFragment();// Intentに結果をセット
Intent data = new Intent();data.setExtra(EXTRA_NAME, name);caller.onActivityResult( getTargetRequestCode(), Activity.RESULT_OK, data);
25
アンチパターン その7
Singleton(static変数)にアクセストークンや
ユーザー情報のような
データをいれている
26
アンチパターン その7
Androidでは、アプリ中断中にプロセスがkillされることがあります。
(PCの世界では想像できない挙動)
プロセスがkillされる時にstatic変数の内容を退避させる手段はありません。
アプリ
プロセス
再開中断
27
「アプリが時々落ちる」原因の多くは、
本日紹介したアンチパターンを踏んでいることが多いです。
ネットや書籍のサンプルを公開する
アプリに組み込む時は、
アンチパターンを踏んでいないか
チェックしましょう
まとめ
28
29