Rendimiento de EditText: Descripción del tiempo de procesamiento de la GPU en la renderización de GPU de perfil

Estoy investigando maneras de mejorar el rendimiento en EditText , específicamente en lo que respecta a los tiempos de carga. Al cargar documentos grandes de unos miles de palabras o más, llamar a setText puede congelar la interfaz de usuario durante varios segundos en algunos de mis dispositivos de prueba y emuladores.

En respuesta, he explorado varias soluciones posibles, ninguna de las cuales produce resultados satisfactorios. He tratado de dividir documentos grandes por párrafo, y cargar cada párrafo en su propia RecyclerView o ListView fila. RecyclerView era completamente desesperada debido a un problema que causa el desplazamiento espasmódico . ListView proporcionó tiempos de carga excelentes, casi inmediatos, y desplazamiento bastante bueno (aunque no tan bueno como un bloque de EditText ), pero existe un problema en el que EditText bloquea dentro de las filas pierde el foco cuando se selecciona . También he intentado actualizar un EditText en secciones de onProgressUpdate en un AsyncTask , con la esperanza de que el usuario pueda interactuar con el texto, ya que carga en secciones, pero los tiempos de carga son en gran medida no afectados.

La avenida más prometedora que he explorado se relaciona con el cambio del siguiente elemento en AndroidManifest.xml :

  android:hardwareAccelerated="false" 

Tengo la idea después de ver el siguiente segmento de este clip de YouTube en el canal Google Developers. Cuando cambié la representación del Perfil GPU, descubrí que la barra naranja (que representaba el "tiempo del proceso") se disparaba cada vez setText se llamaba setText . Cuando desconecté la aceleración de hardware, el rendimiento de setText aumentó masivamente, aunque otras áreas (como el desplazamiento) se volvieron mucho peores.

Lo que me gustaría entender es – ¿por qué está sucediendo esto? Además, ¿hay alguna manera de que pueda usar esta información para aumentar aún más el rendimiento? ¿Puedo activar y desactivar la aceleración de hardware mediante programación simplemente?

Vale la pena mencionar algunos dispositivos, como un Nexus 7 2013 que ejecuta la API 22, no sufren ningún problema al llamar a setText en documentos grandes, mientras que otros realmente luchan con la aceleración de hardware. Sólo quiero entender lo que está pasando mejor para que pueda intentar solucionarlo! Gracias.

EDITAR:

Aquí hay un enlace a un repositorio de GitHub para que cualquiera pueda descargar una de mis aplicaciones de prueba de ejemplo para replicar los problemas que he enumerado anteriormente. También tengo tres videos que publiqué en el sitio que demuestran estos problemas, que voy a reflejar a continuación:

He realizado tres demostraciones de video que muestran esta aplicación en ejecución en un Huawei Honor Holly con KitKat 4.4.2 con el atributo hardwareAccelerated establecido como true en el AndroidManifest , luego con el mismo teléfono con el mismo atributo establecido en false y un Nexus 7 separado (2013) ejecutando Lollipop 5.1 con aceleración de hardware habilitada. El perfil de GPU está activado en cada caso.

Honor Holly – Aceleración On

Honor Holly – Aceleración desactivada

Nexus 7 (2013) – Aceleración On

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.