How to improve performance
-
Upload
atsuko-fukui -
Category
Technology
-
view
21 -
download
0
Transcript of How to improve performance
![Page 1: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/1.jpg)
How to find problem causes and improve performance
Fukui Atsuko
![Page 2: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/2.jpg)
About me
• 福井敦子 / Fukui Atsuko
• @muumuumuumuu
• Retty, Inc.
• その前は組み込み系Androidのお仕事
![Page 3: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/3.jpg)
Agenda• 目標、前提知識の確認
• Case 1: Systrace
• Case 2: Allocation Tracker
• おまけ1: Memory Leak
• おまけ2: 学習資料
![Page 4: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/4.jpg)
本日の目標
![Page 5: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/5.jpg)
もっさりアプリをどうにかするときに 辿りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )و
![Page 6: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/6.jpg)
もっさりアプリをどうにかするときに初心者の辿りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )و
このあたりの人を対象にお話しします
![Page 7: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/7.jpg)
もっさりアプリをどうにかするときに初心者の辿りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )و
このレベルまでいくのが目標
![Page 8: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/8.jpg)
Android Performance 前提知識
![Page 9: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/9.jpg)
AndroidにおけるPerformance
• 一つのApplicationにMain Threadは一つ
• 並列処理をしたかったら別Threadに処理を分ける必要がある
![Page 10: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/10.jpg)
AndroidにおけるPerformance
• ApplicationごとにAndroidシステムのリソース(CPU, メモリ)の奪い合い
• システムが各Applicationにメモリを割り当てる
• メモリ上限に達するとGCが走る
• CPUが使われてPerformanceが低下
![Page 11: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/11.jpg)
ANR
• Application Not Responding (アプリケーションが応答していません)
• Input Eventが5秒以上応答なし
• Broadcast Receiverの処理に10秒以上かかる
![Page 12: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/12.jpg)
具体的に
![Page 13: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/13.jpg)
ご紹介するツール• なるべく普段開発者が親しんでいるツールを使う
• Android Studio (v2.2.3)
![Page 14: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/14.jpg)
コードを使って説明します• Android NのEaster Egg
• コードが公開されています
• https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r1/packages/EasterEgg
• 「packages/easteregg」でググっても出ます
![Page 15: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/15.jpg)
Neko • ひたすらねこを集めるアプリ
• ねこあつめのように去ったりしない
• Quick Settingsに餌を置いておくとねこが増えていく
![Page 16: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/16.jpg)
こんな感じ
![Page 17: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/17.jpg)
が100匹近く集まると…
• 一覧画面を開きながら餌を置くとANR
• 一覧画面をスクロールするともたつく
![Page 18: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/18.jpg)
Case 1:一覧画面を開きながら 餌を置くとANR
![Page 19: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/19.jpg)
ANR例
![Page 20: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/20.jpg)
パフォーマンスで困った時は• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
![Page 21: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/21.jpg)
パフォーマンスで困った時は• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
![Page 22: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/22.jpg)
Systrace
• Applicationとシステム全体のTrace Logを取得できる
• 時間軸でThreadごとに何が起こっているかわかる
• ANRの原因となるMain Threadをブロックしている原因が見える
![Page 23: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/23.jpg)
Systrace
• Device Monitorを立ち上げる
• Tools > Android > Android Device Monitor
![Page 24: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/24.jpg)
Systrace (続き)
• Deviceタブでtrace対象のアプリを選択
• をクリック
• いろんな設定を確認してOKをクリック
![Page 25: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/25.jpg)
結果を見てみる👀• htmlが生成される
![Page 26: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/26.jpg)
なんか読み込まれてる…
![Page 27: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/27.jpg)
どの辺のコードが動いているか?• “R.drawable.body” でコードを検索
• どうやら を描画する処理が動いている
![Page 28: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/28.jpg)
パフォーマンスで困った時は• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
![Page 29: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/29.jpg)
処理を改善しよう• 改善以前にそもそも必要な処理なのか考える
• 餌をおくタイミングで の描画処理は必要ないはず
• 不必要な処理が動いてコストが上がっている
![Page 30: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/30.jpg)
コードの追い方• を描画するトリガーをリストアップ
• 一覧画面のonCreate()
• Shared Preference の変更通知
![Page 31: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/31.jpg)
コードの追い方• Shared Preferenceの変更通知のトリガーを考えてみる
• のデータと餌の情報を一つのShared
Preferenceにまとめてしまった
• 餌の状態が変わったため を再描画
![Page 32: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/32.jpg)
修正方法• もともと一つのSharedPreference
エサ
一覧画面再描画処理
SharedPreference ChangeListener
![Page 33: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/33.jpg)
• データを分離し、適切な範囲でlistenerを設定
エサ
修正方法
一覧画面再描画処理
SharedPreferenceChangeListener
![Page 34: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/34.jpg)
🎉
![Page 35: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/35.jpg)
Case 2: 一覧画面をスクロールすると
もたつく
![Page 36: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/36.jpg)
もたつき例
![Page 37: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/37.jpg)
パフォーマンスで困った時は• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
![Page 38: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/38.jpg)
Allocation Tracker (DDMS)
• Applicationのmemory allocationを記録
• 記録対象
• Call Stack
• メモリサイズ
![Page 39: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/39.jpg)
Allocation Tracker (DDMS)
• Android Studio起動
• Android Monitor > Monitors >
![Page 40: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/40.jpg)
Allocation Tracker (続き)
• Trackingがスタートするので、画面を操作してもたつかせる
• Trackingしたい動作が終了したらもう一度 を押してTracking終了
![Page 41: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/41.jpg)
結果を見てみる👀• .allocファイルが生成される
![Page 42: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/42.jpg)
結果を見てみる👀• Stack Trace をたどれ、どこが重いかわかる
• 右クリックでソースコードに飛べます!
![Page 43: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/43.jpg)
もたつきの原因• スクロールするときに のアイコンを描画する処理が重すぎる
• 処理の詳細を読んでみる
• Bitmapの生成、Vector Drawableの生成を全てメインスレッドで実行
![Page 44: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/44.jpg)
パフォーマンスで困った時は• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
![Page 45: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/45.jpg)
処理の改善• 重たい処理を別スレッドに移して、画面の更新処理のみメインスレッドで行うように変更する
• 画面の更新処理はUIスレッドで行う必要があるので注意
![Page 46: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/46.jpg)
🎉
![Page 47: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/47.jpg)
おまけ Memory Leakについて
![Page 48: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/48.jpg)
Memory Leak
• GC (Garbage Collection)対象にならないけれど、使われていないオブジェクトがメモリヒープに居座り続けること
• 解放されないと使用可能なメモリが減っていくので、GCが頻繁に起こり、パフォーマンスが低下する
![Page 49: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/49.jpg)
Heap Viewer (DDMS)• 特定時点のメモリの状況を見ることができる
![Page 50: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/50.jpg)
Heap Viewer (DDMS)
• Device Monitorを立ち上げる
• Tools > Android > Android Device Monitor
![Page 51: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/51.jpg)
Heap Viewer (DDMS)
• Device Tab > 対象のプロセスを選択
• を押して Cause GCボタン押下
![Page 52: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/52.jpg)
Heap Viewer (DDMS)
• 任意のタイミングでGCを起こしてHeap Sizeやシステムに割り当てられたメモリを確認できる
![Page 53: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/53.jpg)
Leak Canary
• Square社がオープンソースで公開しているlibrary
• https://github.com/square/leakcanary
• Leakを検知したらリアルタイムで通知
• どのインスタンスがLeakしたかわかる
![Page 54: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/54.jpg)
おまけ 学習資料
![Page 55: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/55.jpg)
Android Developers
• ご存知公式Reference
• このあたりがオススメです
• Develop > Training > Best Practices for Performance
• Develop > Android Studio >User Guide > Profile Your App
![Page 56: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/56.jpg)
UDACITY• オンライン学習プラットフォーム
• https://www.udacity.com/
• Googleがパートナーシップを締結
• Android Performanceコース
• 動画とコードとクイズの組み合わせ
![Page 57: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/57.jpg)
書籍• メモリリークの話がぼんやりとしかわからなかった人向け
• Javaでなぜつくるのか 知っておきたいJavaプログラミングの基礎知識
• 米持 幸寿, 日経BP社, 309p
![Page 58: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/58.jpg)
書籍• AndroidのThreadやProcessをもっと知りたい人向け
• Androidのなかみ InsideAndroid
• Tae Yeon Kim他, パーソナルメディア, 506p
![Page 59: How to improve performance](https://reader033.fdocument.pub/reader033/viewer/2022051300/58cea9671a28abb26e8b6b2f/html5/thumbnails/59.jpg)
Thank you!