Androidの性能は優れています.メモリは分析と方法を使って最適化を呼びかけます.


Androidアプリケーションの性能分析、最適化には、メモリ使用状況とメソッド呼び出し状況を確認する必要があります.本論文はこの2つの側面の分析を行うためのツールと方法を与える.
メモリ使用解析
1.メモリの使用を分析する
AndroidシステムのDalvik仮想マシンはゴミ回収機構がありますが、携帯電話のメモリ使用には普通のPCとは違って大きな制限がありますので、メモリの使用についてもっと注意してください.
  • のいくつかのメモリの使用問題は、メモリの消耗(不足)時にトリガされるOutOfMemoryErrorが、Appを直接崩壊させる可能性があるということが明らかになります.
  • はまたいくつかのメモリの問題がありますが、彼らはあなたのアプリとシステムを遅くします.
  • 上記の2つの状況がある時は、メモリの使用状況を確認します.
  • 過大のオブジェクトは、メモリ
  • を占有します.
  • オブジェクトの一部は、未公開のまま作成されています.
  • 2.ツール
    AndroidのADTでは、メモリを分析するために2つのツールが提供されています.
  • オブジェクト割当関連:DDMS中のAllocation Tracker.このツールを利用して、オブジェクトの生成と分配状況を見ることができます.オブジェクトがいつ作成されたかは分かりますが、アプリ全体のオブジェクト割り当て状況は分かりません.
  • Heapの使用状況について:
  • DDMSにおけるHeapツール.
  • hprof導出ツールは、DDMSでhprofファイルを導出し、メモリAnalyzerで参照する.
  • hprofファイルはJava仮想マシンのHeapスナップショットです.
    3.Heapのリアルタイム状況を確認する
  • DDMSを開いて、アプリケーションを選択して、Update Heapボタン
  • をクリックします.
  • 右側のHeapタブページには、Heapの使用状況が表示されています.
  • 操作アプリケーションは、どの操作がメモリの使用量を増加させますか?
    4.Memeory Analyzerメモリ使用状況を分析する
    リアルタイムのHeapの使用状況によって、どのような操作がありますか?どのページにメモリがありますか?
    Allocation Trackerは、オブジェクト割り当てと参照される詳細な情報を提供する.
    また、私たちの分析のための参考になる報告書も提供しています.
    ここでダウンロードしてください.Memeory Analyzer.
    DDMSを通じてhprofファイルを導き出すことができます.Memeory Analyzerでは次のように分析します.
  • はDDMSを開いて、アプリケーションを選択して、Dump HPROF fileをクリックして、しばらくの時間を待って、10数秒は更に長くて、hprofファイルを保存します.
  • で導出されたファイルはDalvik仮想マシン形式のもので、J 2 SE仮想マシンフォーマットに変換する必要があります.そうでないと、Memeory Analyzerはwindowsで開けられません.cmd:
    cd /d D:\android\adt\adk\tools
    
    hprof-conv.exe D:\tmp\com.srain.cube.sample.hprof D:\tmp\com.srain.cube.sample-conv.hprof
    
    
  • は、Memeory Analyzerでファイルを開いてファイル分析を開く過程で、分析報告書を作成するかどうかがヒントとなり、分析報告書では、どのオブジェクトが不審なメモリ占有の対象であるかを指摘する.
  • 画面の展示は大体次の通りです. 
    Histogramをクリックします
    各オブジェクトはリストで並べ替えられます.
  • Shallow Heap:占有する本当のメモリサイズ
  • Retained Heap:オブジェクト自体のサイズ+維持されている参照のサイズ
  • あるオブジェクトを選択すると、List Object->with incomming reference/with outcomming referenceが参照と適用されている状況を見ることができます.これらによって、検索を加えて、未釈放または過大な問題があるオブジェクトの位置を判断することができます.
    Memeory Analyzerは強力な機能を持っています.もっと使い方を教えてください。ここをクリックしてください。.
    メソッド呼び出し分析
    Appは流暢ではなく、方法実行速度とより直接的な関係があります.メインUIスレッド上の時間消費操作は5 sを超えると、システムはユーザーにプログラムの終了を促す.ListViewのgetView()方法では、10 msの時間がかかる動作は、リストを見るに耐えられないほど十分です.
    AndroidフレームのDebug類は方法を提供しています.記録方法で呼び出した実行データはトラックファイルになります.コードの中で:
    //    trace    : /sdcard/cube.trace
    
    Debug.startMethodTracing("cube");
    
    
    
    // ...
    
    //      
    
    
    
    //   
    
    Debug.stopMethodTracing();
    
    
    シミュレータやSDKがない本物のマシンでデバッグする時、直接/sdcardを使うと、Permission denyエラーが発生する可能性があります.
    生成されたtraceファイルは、adb pullでローカルに保存されます.
    adb pull /sdcard/cube.trace D:\tmp\cube.trace
    
    
    直接ADTのeclipseで開く:
    上図中:
  • 上部領域(Timeline Panel)は、各スレッドの時間ラインの概要である.
  • は領域1で、マウスは左右の矢印の形で、拡大した後に、ドラッグして縮小サイズ
  • を縮小することができます.
  • マウスを各スレッドの時間軸領域に置きます.例えば、メインスレッドの2領域は、マウスが十字状になり、左右にドラッグして注目エリアを選択し、適切な注目エリアを選択して、マウスを放して、領域が拡大します.
  • 下部領域(Profile Panel)は、方法の呼び出しの場合、いくつかのパラメータは以下のように紹介されています.
  • cpu time、方法実行の本当の時間
  • real time,cpu time+その他時間(IO wait,Thread wait)
  • Inc xxx Time、Incはinclusiveの略語であり、本方法の呼び出し時間及び本方法の内部で呼び出された方法(サブメソッド)の合計
  • Excl xxx Time、Exclはexclusiveの略語であり、この方法自体が時間
  • を実行するサブメソッドを除く.
  • Calls+RecurCalls/Totalは、親子法の呼び出し回数が
  • を占めることを示している.
  • 方法を選択すると、タイムラインに強調表示があります.時間線図を拡大して、方法の実行時間の長さを視覚的に見ることができます.呼び出し図を見て、この方法が呼び出された階層関係を見つけることができる.
  • Excl TimeとInc Timeを調べて、呼び出し関係を分析して、本当の時間を消費する方法を探して、性能のボトルネックを探し出すことができます.
  • 上の図では、Excl Timeランキング2番目の方法です.  bytesToHexString 性能の問題があるかもしれません.