Desarrollo de Android: ¿Sugerencias de Realce de Sintaxis Effecient?

He desarrollado mi propia biblioteca de resaltado de sintaxis para Android, y funciona muy bien, pero el problema es que ralentiza la escritura.

He intentado usar un AsyncTask para realizar las expresiones regulares en el fondo entonces aplico los colores necassary pero todavía retardó abajo el proceso de mecanografía.

En la actualidad, lee todo el EditText, pensé en lugar de obtener la línea del cursor de texto está en, obtener que las líneas de CharSequence a continuación, realizar las expresiones regulares en esa línea en lugar de todo el documento, pero realmente no sé cómo podría obtener La línea que el usuario está trabajando en :(.

¿Algunas ideas?

Gracias, Alex.

A menos que esté realizando sólo regexn / highlighting de una sola línea, su estrategia propuesta puede no funcionar. Por ejemplo, probablemente no sepa si está en un comentario de varias líneas sin, así, escanear varias líneas. Todos los derechos reservados

Si aún no lo ha hecho, use Traceview para identificar dónde están específicamente las desaceleraciones. Puede ser que usted puede optimizar bastante otras cosas. Por ejemplo, tal vez está compilando todos sus objetos de Pattern sobre la marcha en lugar de definirlos de forma estática.

Más allá de eso, creo que un patrón típico es aplicar sólo el resaltado de sintaxis cuando el usuario hace una pausa. Una forma posible de implementar esto sería:

Paso # 1: En cada cambio de texto (que usted presumiblemente ha enganchado en), postDelayed() a Runnable y guardar la marca de tiempo recuperada de SystemClock.uptimeMillis() en un miembro de datos de su subclase EditText (o dondequiera que tenga el color de sintaxis lógica). Para los propósitos de esta respuesta, llamaré su período de demora que utilice con postDelayed() como DELAY .

Paso # 2: El Runnable compara la hora actual de SystemClock.uptimeMillis() con la hora del último cambio de texto. Si la diferencia de tiempo es menor que DELAY , sabrá que el usuario escribió algo entre el momento en que se programó este Runnable y ahora, por lo que simplemente no hace nada. Si la diferencia de tiempo> = DELAY , sin embargo, se ejecuta a través de su lógica de coloración de sintaxis.

De esta manera, se omite la aplicación del color de sintaxis hasta que el usuario hace una pausa, por lo que no interrumpe su escritura. Puede ajustar DELAY , o tal vez hacerlo configurable.

BTW, que está pensando en la liberación de este como una biblioteca de código abierto, ¿verdad? Todos los derechos reservados

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