¿Cuál es el propósito de estas interfaces?
CharSequencees una interfaz estándar de Java que representa una secuencia de caracteres. Stringes la implementación concreta más utilizada de CharSequence, seguida de StringBuilder.
Spannedes un CharSequencecon "intervalos" que indica el formato que se aplicará a partes del texto, donde esos intervalos no se pueden modificar.
Spannablees a Spanned, agregando la capacidad de modificar los intervalos (para agregar o quitar formato), pero no para modificar el texto en sí.
SpannedStringes una implementación concreta de la Spannedinterfaz.
SpannableStringes una implementación concreta de la Spannableinterfaz.
  ¿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 TextViewcon a Spannedes 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 SpannableStringsea significativamente más lento que SpannedStringen 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 SpannableStringo SpannedStringpara varias cosas. Sin embargo, si las diferencias de rendimiento son suficientes o no, dependerá del uso.
     
                
spannableStringy no una normal ... porque me enfrento a un gran retrasosetText(my_string)cuandomy_stringtiene emoticones (como la de watsapp) en comparación con una cadena normal. . (que solo tiene texto sin formato) amablemente arroje algo de luz ... de alguna manera creí que los smilleys no son más que texto (unicode) soloImageSpanque a su vez requiereSpannableString.Cuerda
A
Stringes inmutable (es decir, el texto no puede cambiar). Tampoco tiene ningún intervalo asociado. (Los intervalos son rangos sobre el texto que incluyen información de estilo como color, resaltado, cursiva, enlaces, etc.) Por lo tanto, puede usar unStringcuando su texto no necesita ser cambiado y no necesita ningún estilo.StringBuilder
A
StringBuildertiene texto mutable, por lo que puede modificarlo sin crear un nuevo objeto. Sin embargo, no tiene información sobre el intervalo. Es solo texto sin formato. Por lo tanto, use aStringBuildercuando necesite cambiar el texto, pero no le importa darle estilo.SpannedString
A
SpannedStringtiene texto inmutable (como aString) e información de intervalo inmutable. Es una implementación concreta de los requisitos definidos por laSpannedinterfaz. Use aSpannedStringcuando su texto tenga estilo, pero no necesite cambiar el texto ni el estilo después de su creación.Nota: No existe tal cosa como un
SpannedStringBuilderporque si el texto cambia, es muy probable que la información del intervalo también tenga que cambiar.SpannableString
A
SpannableStringtiene texto inmutable, pero su información de intervalo es mutable. Es una implementación concreta de los requisitos definidos por laSpannableinterfaz. Use aSpannableStringcuando su texto no necesite ser cambiado pero el estilo sí.SpannableStringBuilder
A
SpannableStringBuildertiene tanto texto mutable como información de extensión. Es una implementación concreta de los requisitos definidos por las interfacesSpannableyEditable(entre otros). Utilice aSpannableStringBuildercuando necesite actualizar el texto y su estilo.CharSequence
A
CharSequencees una interfaz y no una clase concreta. Eso significa que solo define una lista de reglas a seguir para cualquier clase que lo implemente. Y todas las clases mencionadas anteriormente lo implementan. Por lo tanto, puede usar unCharSequencecuando desee generalizar el tipo de objeto que tiene para una máxima flexibilidad. Siempre se puede abatido a unaStringoSpannableStringBuildero lo que sea más tarde si es necesario.fuente