2015-05-19 7 views
0

У меня есть GridView с миниатюрными изображениями, загруженными в отдельную тему. После того, как все миниатюры будут загружены, если я прокручу сетку, она будет медленно медленно (~ 5 кадров в секунду), пока я не прокручу несколько строк вниз, а затем быстро прокрутит ее (~ 30 кадров в секунду), даже если я снова прокручу ее снова.Android GridView медленная прокрутка, затем очень быстрая прокрутка

Если я затем перепрограммирую сетку, это медленно, пока я не прокручу вниз. Это не вопрос переработки взглядов, как я уже это делаю.

(Update: загружен правильный медленный след изображение)

Я разыскал вопрос к внутреннему вызову отрисовки. Вот след Android студии, когда он медленно:

slow trace

И здесь след, когда это быстро:

fast trace

Это ясно виновный метод android.view.ThreadedRenderer.draw(), но это внутренний вызов, и я не могу проверить дальше. Из моего следа я понимаю, что это не тот рисунок, который медленный, так как android.view.ThreadedRenderer.updateRootDisplayList(), который в конечном итоге вызывает android.widget.AbsListView.draw(), заканчивается так же быстро в обеих трассах. Таким образом, это должно быть остальная часть android.view.ThreadedRenderer.draw(), которая вызывает это.

Посмотрев онлайн Я нашел the ThreadedRenderer.java class

Вещи, которые я пробовал:

  • Принуждение аппаратного рендеринга на GridView не имеет никакого значения.

  • Принудительный рендеринг программного обеспечения на экране сетки заставил список всегда прокручиваться очень медленно.

Любые идеи, почему это может произойти?

ответ

0

Ну, причина, по которой ускорить прокрутку после первого раза, - это то, что Android перерабатывает виды. Это означает, что для создания представлений изначально требуется больше времени.

Я думаю, что вы собираетесь слишком глубоко. Вы должны убедиться, что вы не загружаете миниатюры синхронно во время draw. Попробуйте удалить код, загружающий изображения, или установите для URL-адреса значение «». По существу, попробуйте разделить вид миниатюр, пока вы не сможете определить, в чем проблема. Это должно помочь вам на правильном пути.

+0

Я не думаю, что это проблема с повторной обработкой взглядов, поскольку я уже это делаю. Плюс я жду ~ 20 секунд, прежде чем начать прокрутку, и это не медленно прокручивается только при показе новой строки ячеек, но всегда. – manixrock

+0

Эскизы загружаются в отдельный поток, и я регистрирую загрузку миниатюр и адаптеры 'getView()', и все они очень быстрые. Никакие эскизы не загружаются во время прокрутки, все они загружаются в память до этого и только назначаются в виде изображения ячейки внутри вызова 'getView()' адаптера. – manixrock

+0

Хмм, это трудно сказать, не видя ни одного вашего кода. Что произойдет, если вы замените представление миниатюр простым текстовым редактором? Кроме того, вы пробовали другие устройства/эмуляторы (genymotion)? –