2012-03-14 4 views
2

Когда я смотрю на ListView и прокручиваю его, я знаю, что это заикается, если это очевидно. Но иногда, когда это не так очевидно, меня смущает ли прокрутка заикания или нет? Другими словами, как я могу определить, потеряли ли кадры?Как обнаружить заикание программно?

Есть ли способ обнаружить такое заикание программно? Я прочитал "How to discover if OpenGL ES frame rate is stuttering - without Instruments?", но я не думаю, что это подходит для 2D-представлений, таких как ListView в Android.

+0

То, что я заметил, когда дело с моим ListViews - это то, что они «заикаются» каждый раз, когда запускает сборщик мусора. Это имеет смысл, так как это означает, что система тратит время на то, чтобы делать что-то еще, кроме как сделать ваши взгляды. Вы можете проверить LogCat, чтобы узнать, происходит ли это в вашем случае. – dmon

+0

Это действительно ключ, но не работает для меня. GC не произошло, пока я чувствую, что заикается. – Loong

ответ

2

Один из способов сделать это (я его еще не тестировал) - расширить список ListView, переопределить метод draw или onDraw и проверить, сколько раз он вызывается в течение секунды. Все, что ниже ~ 25 кадров в секунду, означает, что оно заикается.

Также не стоит ничего, что есть почти всегда оптимизации, которые вы можете сделать на вашем ListView, чтобы избежать заикания на всех телефонах (подсказка: проверьте повторное просмотра в вашем адаптере)

+0

FPS ниже 25 не означает, что произошло заикание. Думая о прокрутке Начальный экран медленно, наверняка fps ниже даже ниже 10, но вы не заметите заикания. И мы можем позволить SHOW_FPS = true в ViewRoot.java показывать текущие fps. – Loong

+0

На самом деле, прокрутка Начального экрана медленно будет показывать максимальный fps, даже если вы прокручиваете его медленно. – zrgiu

+0

ОК, но почему 25? Это практическая или теоретическая ценность? – Loong

Смежные вопросы