Quel est le but de ces interfaces?
CharSequenceest une interface Java standard représentant une séquence de caractères. Stringest la mise en œuvre concrète de CharSequence, suivie de StringBuilder.
Spannedest un CharSequenceavec des "travées" indiquant le formatage à appliquer à des parties du texte, où ces travées ne peuvent pas être modifiées.
Spannableest un Spannedajout de la possibilité de modifier les travées (pour ajouter ou supprimer une mise en forme), mais pas pour modifier le texte lui-même.
SpannedStringest une implémentation concrète de l' Spannedinterface.
SpannableStringest une implémentation concrète de l' Spannableinterface.
dans quels scénarios est-il le plus courant de les utiliser?
Lorsqu'il y a une méthode qui en renvoie un (par exemple, getText()sur un EditText) ou lorsqu'il y a une méthode qui en prend un comme paramètre (par exemple, setText()sur a TextView).

Votre cas d'utilisation cité Html.fromHtml()est peut-être le plus courant dans le développement Android conventionnel, car un TextViewavec un Spannedest beaucoup plus léger qu'un WebView. Cependant, il existe d'autres cas d'utilisation, tels que:
Dans quels cas est-il préférable d'éviter de les utiliser?
Ils sont singulièrement terribles pour lutter contre la calvitie, le déneigement, la réparation de la pompe à chaleur, la fabrication d'un soufflé, etc.
:-)
Y a-t-il des impacts évidents sur les performances à prendre en compte lors de l'utilisation de l'un d'entre eux?
Les interfaces, par définition, n'ont pas d '«impact sur les performances» - elles ne sont qu'une description d'une API.
Je ne suis pas conscient que ce SpannableStringsoit beaucoup plus lent que SpannedStringlors d'une opération particulière. Cependant, SpannableStringBuilder(qui permet de manipuler le texte en plus des étendues qui formate ce texte) peut bien être un peu plus lent que SpannableStringou SpannedStringpour diverses choses. Le fait que les différences de performances soient suffisantes ou non dépendra de l'utilisation, cependant.