2012-01-17 2 views
1

私のアプリのパフォーマンスが低下しているかどうかを判断しようとしています。メインスレッドを独占しているものを探しています。メインスレッドの使用

私はちょうどLooper.setMessageLoggingを発見し、メインスレッドが使用されている方法を確認するには、顧客Printerを設定しています:

Looper.getMainLooper().setMessageLogging(new LogPrinter(Log.DEBUG, "MainLooper")) { 

    private long startTime = 0L; 

    @Override 
    public void println(String x) { 
     if (x.startsWith(">")) { 
      startTime = System.nanoTime(); 
     } else if (x.startsWith("<")) { 
      final long duration = System.nanoTime() - startTime; 
      x += " (" + (duration/1000000L) + " ms)"; 
     } 
     super.println(x); 
    } 

}); 

これははい、以上を取ったコードがたくさんある、ということを発見するために私をリードしてきました500ミリ秒程度で、何秒かかかっているものもあります。これはおそらくパフォーマンスが悪いためです。

D/MainLooper(1542): >>>>> Dispatching to Handler{433ae6a0} null: 1000 
D/MainLooper(1542): <<<<< Finished to Handler{433ae6a0} null (952 ms) 

ここでは、これらのログメッセージを理解するために残しておきます。私はどの方法がメインスレッドで952ミリ秒かかるか分からない。長い時間がかかる方法を正確に突き止める良い方法はありますか?

答えて

6

メソッドのプロファイリングを使用してアプリの実行速度を判断する方法については、THISの記事をご覧ください。

Eclipseを使用している場合:[DDMS]タブには、[Devices]ウィンドウにいくつかの矢印と赤いレコードアイコンがあるボタンが表示されます。これは「メソッドのプロファイリングの開始」ボタンです。これをクリックしてアプリを起動し、スローダウンを引き起こしていた操作を実行します。完了したら、もう一度そのアイコンをクリックして録音を停止します。あなたの電話機から結果を取り出すまでに数秒を要すると、どのメソッドが呼び出され、どのくらいの時間がかかったかを示す素晴らしいタイムラインが表示されます。これを使用すると、どのメソッドが最も長くかかっているかを追跡し、アプリケーションでオーバーヘッドを減らすことができます。

関連する問題