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.
- Limite la longitud del texto de EditText en Android
- Agregar cadena no editable a EditText
- ¿Error de EditText? ¿Contenido de texto duplicado en la primera rotación?
- Captura de EditText Foco perdido
- ¿Cómo utilizo AsYouTypeFormatter TextWatcher en la aplicación de Android?
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 comotrue
en elAndroidManifest
, luego con el mismo teléfono con el mismo atributo establecido enfalse
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
- EditText necesita hacer clic dos veces para abrir el cuadro de diálogo de búsqueda
- Dibujable a la derecha en el texto de edición sin actualizar después del error
- ¿Cómo detectar caracteres especiales en un texto de edición y mostrar un Toast en respuesta (Android)?
- Android-7.0: EditText actionId incorrecto en el editor actionlistener
- Establecer la posición del cursor en Android Editar texto
- Cómo rellenar automáticamente el correo electrónico edittext con el ID de correo electrónico con el que está registrado el dispositivo
- ¿Cómo revisar el campo en android-saripaar?
- Android EditText: perder el enfoque después de la entrada
- Cobertura de código con jacoco para una biblioteca de Android
- String 'xyz' marcada como intraducible pero que existe en la localidad 'ja'