私のアプリのパフォーマンスが低下しているかどうかを判断しようとしています。メインスレッドを独占しているものを探しています。メインスレッドの使用
私はちょうど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ミリ秒かかるか分からない。長い時間がかかる方法を正確に突き止める良い方法はありますか?