Я пытаюсь определить, что ухудшает производительность моего приложения, и я изучаю, что монополизирует основной поток.
Я только что обнаружил 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 мс в основном потоке.Есть ли лучший способ точно определить метод, который занимает так много времени?