RadiationX
@RadiationX
Front-End разработчик

Почему приложение лагает после создания нескольких фрагментов?

Решил ради интереса сделать нечто похожее на вкладки браузера, но столкнулся с проблемой, что если открыть (создать фрагменты) штук 10 вкладок, то приложение начинает безбожно лагать. Если переключаться между вкладками, например в обратно направлении, то лаги постепенно исчезают и в той вкладке, где были жутки лаги, уже всё идеально плавно. Вот видео для демонстрации: https://drive.google.com/file/d/0B9So8zWjVX23MEFfa...
На видео видно, что жутко проседает фпс (со 120, до 30-40)
Исходники проекта: https://github.com/RadiationX/ForPda (по возможности, не "кидайтесь помидорами" за *овнокод, это по сути моё первое приложение написанное с нуля)

Интересно узнать причину такого странного поведения. Я думал что это из-за того, что при смене фрагментов, не отрабатывает onPause(), но вроде это тут не при чем. Буду благодарен, если хоть как-нибудь поможете с этой проблемой.
  • Вопрос задан
  • 397 просмотров
Пригласить эксперта
Ответы на вопрос 3
gadfi
@gadfi
https://gamega.org
webview один из самых медленных элементов android ─ его работа +пока подгрузяться данные ...
Ответ написан
enq3
@enq3
Android engineer at #ITX5
Евгений Низамиев: Тормозить конечно будет при добавлении такого количества фрагментов в одну активность.
Большие списки с повторяющимися элементами лучше делать через адаптеры.
В данном случае лучше взять ViewPager и FragmentPagerAdapter (FragmentStatePagerAdapter).
Ответ написан
Комментировать
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
Использование WebView чревато такими последствиями. На вашем месте - я бы пользовался неким пулом WebView , так, чтобы смысл был следующим:
1. создается пул где нибудь в наследнике от Application, причем в идеале пулл должен реализовывать паттерн singleinstance
2. при создании фрагмента WebView получаем из него(пула, причем, если есть свободные - то отдаем свободный, если нет свободного - то создается новое, с необходимыми вам настроками)
3. при уничтожении фрагмента - очищаем данные вебвью и отправляем заюзанное вебвью обратно в пулл.

Такие вещи позволят вам экономить память. Вообще в джава всегда лучше пользоваться пулами, если вам необходимо создавать множество некоторых тяжелых однотипных объектов, и стандартные средства не предусматривают этого.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы