Intereting Posts
Не удается заставить мое местоположение и кнопку местоположения не показывать Ошибка установки из-за неверного URI? Устанавливается только в режиме отладки? Как внедрить конфигурацию Android в каждый подпроект с помощью Gradle? FirebaseInstanceId: фоновая синхронизация не выполнена: PHONE_REGISTRATION_ERROR, повторите попытку в 10 с / 20 с / 40 с Как включить кеширование expires-header для веб-просмотра Возможно ли одновременное существование двух экземпляров одного и того же приложения для Android? Изменение цвета ScrollView Programmatically Итерации через представления в макете и изменение шрифта Андроид интернет-разрешение не работает Встроенное видео Vimeo не будет воспроизводиться в приложении PhoneGap, но тот же HTML работает без PhoneGap Как отправить SMS из приложения Android без записи в виде SMS-сообщения устройства? Проблема с кнопкой меню Jellybean Android Приложение Intraweb HTML5, git и база данных – они сочетаются? Отладка платформы Android Spring: распечатать отправленные запросы Как передать «данные» между двумя устройствами (Android, iphone)?

Эффективность EditText: понимание времени процесса GPU в профиле GPU Rendering

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

В ответ я рассмотрел несколько возможных решений, ни одна из которых не дает удовлетворительных результатов. Я попытался разделить большие документы по абзацу и загрузить каждый абзац в свою собственную строку RecyclerView или ListView . RecyclerView был полностью безнадежным из-за проблемы, которая вызывает отрывистую прокрутку . ListView обеспечивал большое, почти мгновенное время загрузки и довольно хорошую прокрутку (хотя и не так хорошо, как один блок EditText ), но есть проблема, когда EditText блокирует внутри строк, теряя фокус при выборе . Я также попытался обновить EditText в разделах onProgressUpdate в AsyncTask , надеясь, что пользователь может взаимодействовать с текстом при загрузке в секциях, но время загрузки в значительной степени не изменяется.

Наиболее перспективный путь, который я изучил, связан с изменением следующего элемента в AndroidManifest.xml :

  android:hardwareAccelerated="false" 

Я получил эту идею после просмотра следующего фрагмента этого клипа YouTube на канале Google Developers. Когда я включил рендеринг профиля GPU, я обнаружил, что оранжевая полоса (представляющая «время процесса») запускается каждый раз при вызове setText . Когда я отключил аппаратное ускорение, производительность setText увеличилась, хотя другие области (например, прокрутка) стали намного хуже.

Я бы хотел понять, почему это происходит? Кроме того, есть ли способ, которым я могу использовать эту информацию для дальнейшего повышения производительности? Могу ли я переключать аппаратное ускорение и снова программно просто?

Стоит отметить, что некоторые устройства, такие как API-интерфейс Nexus 7 2013, работающие по API 22, не подвергаются каким-либо проблемам при вызове setText на больших документах, тогда как другие действительно работают с аппаратным ускорением. Я просто хочу понять, что происходит лучше, поэтому я могу попытаться это исправить! Благодарю.

РЕДАКТИРОВАТЬ:

Вот ссылка на репозиторий GitHub для тех, кто загружает одно из моих тестовых приложений для репликации проблем, перечисленных выше. У меня также есть три видеоролика, которые я разместил на сайте, демонстрирующие эти проблемы, о которых я расскажу ниже:

Я сделал три видео-демонстрации, которые показывают это приложение, работающее на Huawei Honor Holly, работающем с KitKat 4.4.2, с атрибутом hardwareAccelerated установленным на true в AndroidManifest , а затем с тем же телефоном с тем же атрибутом, что и false , и отдельным Nexus 7 (2013) работает Lollipop 5.1 с включенным аппаратным ускорением. В каждом случае используется профилирование GPU.

Холли Холли – Ускорение

Хонор Холли – Ускорение

Nexus 7 (2013) – Acceleration On