¿Cuál es el propósito de estas interfaces?
CharSequence
es una interfaz estándar de Java que representa una secuencia de caracteres. String
es la implementación concreta más utilizada de CharSequence
, seguida de StringBuilder
.
Spanned
es un CharSequence
con "intervalos" que indica el formato que se aplicará a partes del texto, donde esos intervalos no se pueden modificar.
Spannable
es a Spanned
, agregando la capacidad de modificar los intervalos (para agregar o quitar formato), pero no para modificar el texto en sí.
SpannedString
es una implementación concreta de la Spanned
interfaz.
SpannableString
es una implementación concreta de la Spannable
interfaz.
¿En qué escenarios es más común usarlos?
Cuando hay un método que devuelve uno (por ejemplo, getText()
en un EditText
) o cuando hay un método que toma uno como parámetro (por ejemplo, setText()
en a TextView
).
Su caso de uso citado Html.fromHtml()
es quizás el más común en el desarrollo convencional de Android, ya que un TextView
con a Spanned
es mucho más liviano que un WebView
. Sin embargo, existen otros casos de uso, como:
¿En qué casos es mejor evitar su uso?
Son particularmente horribles para combatir la calvicie, quitar la nieve, reparar la bomba de calor, hacer un soufflé, etc.
:-)
¿Hay algún impacto obvio en el rendimiento que deba tenerse en cuenta al utilizar alguno de ellos?
Las interfaces, por definición, no tienen "impactos en el rendimiento", son simplemente una descripción de una API.
No sé que SpannableString
sea significativamente más lento que SpannedString
en cualquier operación en particular. Sin embargo, SpannableStringBuilder
(lo que permite manipular el texto además de los intervalos que formatean ese texto) bien puede ser un poco más lento que SpannableString
o SpannedString
para varias cosas. Sin embargo, si las diferencias de rendimiento son suficientes o no, dependerá del uso.