SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
How to find problem causes
and improve performance
Fukui Atsuko
About me
• 福井敦子 / Fukui Atsuko
• @muumuumuumuu
• Retty, Inc.
• その前は組み込み系Androidのお仕事
Agenda
• 目標、前提知識の確認
• Case 1: Systrace
• Case 2: Allocation Tracker
• おまけ1: Memory Leak
• おまけ2: 学習資料
本日の目標
もっさりアプリをどうにかするときに
りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )‫و‬
もっさりアプリをどうにかするとき
に初心者の りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )‫و‬
このあたりの人を対象にお話しします
もっさりアプリをどうにかするとき
に初心者の りがちな成長レベル
• そもそもどうしていいかわからない (´;ω;`)
• コードからアタリをつけて静的解析 ( ◠‿◠ )
• ツールを活用して効率よく改善 ٩( 'ω' )‫و‬
このレベルまでいくのが目標
Android Performance
前提知識
AndroidにおけるPerformance
• 一つのApplicationにMain Threadは一つ
• 並列処理をしたかったら別Threadに処理を分
ける必要がある
AndroidにおけるPerformance
• ApplicationごとにAndroidシステムのリソース
(CPU, メモリ)の奪い合い
• システムが各Applicationにメモリを割り当てる
• メモリ上限に達するとGCが走る
• CPUが使われてPerformanceが低下
ANR
• Application Not Responding (アプリケー
ションが応答していません)
• Input Eventが5秒以上応答なし
• Broadcast Receiverの処理に10秒以上かか
る
具体的に
ご紹介するツール
• なるべく普段開発者が親しんでいるツールを
使う
• Android Studio (v2.2.3)
コードを使って説明します
• Android NのEaster Egg
• コードが公開されています
• https://android.googlesource.com/
platform/frameworks/base/+/
android-7.0.0_r1/packages/EasterEgg
• 「packages/easteregg」でググっても出ます
Neko
• ひたすらねこを集めるアプリ
• ねこあつめのように去ったりしない
• Quick Settingsに を置いておくとねこが増
えていく
こんな感じ
  が100匹近く集まると…
• 一覧画面を開きながら を置くとANR
• 一覧画面をスクロールするともたつく
Case 1:

一覧画面を開きながら
を置くとANR
ANR例
パフォーマンスで困った時は
• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
パフォーマンスで困った時は
• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
Systrace
• Applicationとシステム全体のTrace Logを取
得できる
• 時間軸でThreadごとに何が起こっているかわ
かる
• ANRの原因となるMain Threadをブロック
している原因が見える
Systrace
• Device Monitorを立ち上げる
• Tools > Android > Android Device
Monitor
Systrace (続き)
• Deviceタブでtrace対象のアプリを選択
•   をクリック
• いろんな設定を確認してOKをクリック
結果を見てみる👀
• htmlが生成される
なんか読み込まれてる…
どの辺のコードが動いているか?
• “R.drawable.body” でコードを検索
• どうやら    を描画する処理が動いている
パフォーマンスで困った時は
• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
処理を改善しよう
• 改善以前にそもそも必要な処理なのか考える
• をおくタイミングで   の描画処理は
必要ないはず
• 不必要な処理が動いてコストが上がってい
る
コードの追い方
•    を描画するトリガーをリストアップ
• 一覧画面のonCreate()
• Shared Preference の変更通知
コードの追い方
• Shared Preferenceの変更通知のトリガーを
考えてみる
•    のデータと の情報を一つのShared
Preferenceにまとめてしまった
• の状態が変わったため   を再描画
修正方法
• もともと一つのSharedPreference
エサ
一覧画面再描画処理
SharedPreference ChangeListener
• データを分離し、適切な範囲でlistenerを設
定
エサ
修正方法
一覧画面再描画処理
SharedPreferenceChangeListener
🎉
Case 2:
一覧画面をスクロールすると
もたつく
もたつき例
パフォーマンスで困った時は
• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
Allocation Tracker (DDMS)
• Applicationのmemory allocationを記録
• 記録対象
• Call Stack
• メモリサイズ
Allocation Tracker (DDMS)
• Android Studio起動
• Android Monitor > Monitors >
Allocation Tracker (続き)
• Trackingがスタートするので、画面を操作し
てもたつかせる
• Trackingしたい動作が終了したらもう一度 
を押してTracking終了
結果を見てみる👀
• .allocファイルが生成される
結果を見てみる👀
• Stack Trace をたどれ、どこが重いかわかる
• 右クリックでソースコードに飛べます!
もたつきの原因
• スクロールするときに   のアイコンを描
画する処理が重すぎる
• 処理の詳細を読んでみる
• Bitmapの生成、Vector Drawableの生成を
全てメインスレッドで実行
パフォーマンスで困った時は
• どの処理に時間がかかっているか調べる
• 時間がかかっている処理を改善する
処理の改善
• 重たい処理を別スレッドに移して、画面の更
新処理のみメインスレッドで行うように変更
する
• 画面の更新処理はUIスレッドで行う必要が
あるので注意
🎉
おまけ
Memory Leakについて
Memory Leak
• GC (Garbage Collection)対象にならないけ
れど、使われていないオブジェクトがメモリ
ヒープに居座り続けること
• 解放されないと使用可能なメモリが減ってい
くので、GCが頻繁に起こり、パフォーマン
スが低下する
Heap Viewer (DDMS)
• 特定時点のメモリの状況を見ることができる
Heap Viewer (DDMS)
• Device Monitorを立ち上げる
• Tools > Android > Android Device
Monitor
Heap Viewer (DDMS)
• Device Tab > 対象のプロセスを選択
•  を押して Cause GCボタン押下
Heap Viewer (DDMS)
• 任意のタイミングでGCを起こしてHeap Size
やシステムに割り当てられたメモリを確認で
きる
Leak Canary
• Square社がオープンソースで公開している
library
• https://github.com/square/leakcanary
• Leakを検知したらリアルタイムで通知
• どのインスタンスがLeakしたかわかる
おまけ
学習資料
Android Developers
• ご存知公式Reference
• このあたりがオススメです
• Develop > Training > Best Practices for
Performance
• Develop > Android Studio >User Guide >
Profile Your App
UDACITY
• オンライン学習プラットフォーム
• https://www.udacity.com/
• Googleがパートナーシップを締結
• Android Performanceコース
• 動画とコードとクイズの組み合わせ
書籍
• メモリリークの話がぼんやりとしかわからな
かった人向け
• Javaでなぜつくるのか 知っておきたいJava
プログラミングの基礎知識
• 米持 幸寿, 日経BP社, 309p
書籍
• AndroidのThreadやProcessをもっと知りた
い人向け
• Androidのなかみ InsideAndroid
• Tae Yeon Kim他, パーソナルメディア, 506p
Thank you!

Más contenido relacionado

Destacado

School Improvement Strategies
School Improvement StrategiesSchool Improvement Strategies
School Improvement Strategies
guml
 

Destacado (15)

Magazine questionnaire
Magazine questionnaireMagazine questionnaire
Magazine questionnaire
 
Informe sobre el diagnostico de seguridad industrial,
Informe sobre el diagnostico de seguridad industrial,Informe sobre el diagnostico de seguridad industrial,
Informe sobre el diagnostico de seguridad industrial,
 
Est29 entrega de diplomas
Est29   entrega de diplomasEst29   entrega de diplomas
Est29 entrega de diplomas
 
Edwin s porter
Edwin s porterEdwin s porter
Edwin s porter
 
School Improvement Strategies
School Improvement StrategiesSchool Improvement Strategies
School Improvement Strategies
 
Solution Pragas Desentupidora de Caixa de Gordura/Esgoto
Solution Pragas Desentupidora de Caixa de Gordura/EsgotoSolution Pragas Desentupidora de Caixa de Gordura/Esgoto
Solution Pragas Desentupidora de Caixa de Gordura/Esgoto
 
Business plan
Business planBusiness plan
Business plan
 
5 Simple Tips to Improve Our Performance
5 Simple Tips to Improve Our Performance5 Simple Tips to Improve Our Performance
5 Simple Tips to Improve Our Performance
 
Comunidades virtuales
Comunidades virtualesComunidades virtuales
Comunidades virtuales
 
PISA 2012 Evaluating school systems to improve education
PISA 2012 Evaluating school systems  to improve educationPISA 2012 Evaluating school systems  to improve education
PISA 2012 Evaluating school systems to improve education
 
Breaking Ranks: A Comprehensive School Improvement Framework for K-12 Leaders
Breaking Ranks: A Comprehensive School Improvement Framework for K-12 LeadersBreaking Ranks: A Comprehensive School Improvement Framework for K-12 Leaders
Breaking Ranks: A Comprehensive School Improvement Framework for K-12 Leaders
 
Constructive leadership for school improvement
Constructive leadership for school improvementConstructive leadership for school improvement
Constructive leadership for school improvement
 
Glomus Tumour
Glomus TumourGlomus Tumour
Glomus Tumour
 
Dirello rivista 21x21_[multilang]
Dirello rivista 21x21_[multilang]Dirello rivista 21x21_[multilang]
Dirello rivista 21x21_[multilang]
 
Astronomy project
Astronomy projectAstronomy project
Astronomy project
 

Similar a How to improve performance

Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
Mie Mori
 
Tc sympo tokyo_takayama20090825
Tc sympo tokyo_takayama20090825Tc sympo tokyo_takayama20090825
Tc sympo tokyo_takayama20090825
和也 高山
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02
takepu
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
n-yuki
 

Similar a How to improve performance (20)

ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけてAgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
AgileTourOsaka2011 関係者に理解してもらえるアジャイル開発にむけて
 
20130320 agile pm
20130320 agile pm20130320 agile pm
20130320 agile pm
 
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
そのエラーやお困りごと、ツールを使えば解決できるかも! ~ Sysinternals や OS 標準ツールの徹底活用術 ~ (Microsoft de:c...
 
リーン原則とソフトウェア開発
リーン原則とソフトウェア開発リーン原則とソフトウェア開発
リーン原則とソフトウェア開発
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
AndroidLint #DroidKaigi
AndroidLint #DroidKaigiAndroidLint #DroidKaigi
AndroidLint #DroidKaigi
 
おしゃスタat銀座
おしゃスタat銀座おしゃスタat銀座
おしゃスタat銀座
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
Tc sympo tokyo_takayama20090825
Tc sympo tokyo_takayama20090825Tc sympo tokyo_takayama20090825
Tc sympo tokyo_takayama20090825
 
Agile overview
Agile overviewAgile overview
Agile overview
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02
 
ユーザー事例紹介:ソフトウェア開発でのJIRA活用実践!
ユーザー事例紹介:ソフトウェア開発でのJIRA活用実践!ユーザー事例紹介:ソフトウェア開発でのJIRA活用実践!
ユーザー事例紹介:ソフトウェア開発でのJIRA活用実践!
 
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
2008 電子情報通信学会論文誌-ユースケースポイント計測におけるアクタとユースケースの自動分類の試みと支援ツールの試作
 
協調フィルタリング with Mahout
協調フィルタリング with Mahout協調フィルタリング with Mahout
協調フィルタリング with Mahout
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
プログラムの大海に溺れないために
プログラムの大海に溺れないためにプログラムの大海に溺れないために
プログラムの大海に溺れないために
 

Último

Último (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

How to improve performance