Использование основного потока - PullRequest
1 голос
/ 18 января 2012

Я пытаюсь определить, что ухудшает производительность моего приложения, и я изучаю, что монополизирует основной поток.

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

1 Ответ

6 голосов
/ 18 января 2012

Ознакомьтесь с ЭТОЙ статьей об использовании метода профилирования для определения того, где ваше приложение работает медленно.

Если вы используете Eclipse: на вкладке DDMS вы увидите кнопку в окне «Устройства», на которой есть стрелки и красный значок записи. Это кнопка «Начать профилирование метода». Нажмите на это и запустите ваше приложение и выполните действия, которые вызывали замедление. Когда закончите, нажмите этот значок еще раз, чтобы остановить запись. Дайте несколько секунд, чтобы получить результаты с вашего телефона, и он покажет вам хороший график, показывающий, какие методы были вызваны и сколько времени они заняли. Используя это, вы можете отследить, какие методы занимают больше всего времени, и, надеюсь, снизить нагрузку на ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...