Qual è lo scopo di queste interfacce?
CharSequence
è un'interfaccia standard di Java che rappresenta una sequenza di caratteri. String
è l'attuazione concreta più comunemente usata di CharSequence
, seguito da StringBuilder
.
Spanned
è un CharSequence
con "span" che indica la formattazione da applicare a porzioni di testo, in cui tali span non possono essere modificati.
Spannable
è un Spanned
, aggiungendo nella capacità di modificare le campate (per aggiungere o rimuovere formattazione), ma non modificare il testo stesso.
SpannedString
è un'implementazione concreta dell'interfaccia Spanned
.
SpannableString
è un'implementazione concreta dell'interfaccia Spannable
.
in quali scenari è più comune usarli?
Quando v'è un metodo che restituisce uno (per esempio, su un getText()
EditText
) o quando v'è un metodo che prende uno come parametro (per esempio, su un setText()
TextView
). 
tuo caso citato di utilizzare Html.fromHtml()
è forse il più comune nello sviluppo di Android convenzionale, come TextView
con un Spanned
è molto più leggero nel peso che è un WebView
.Tuttavia, ci sono altri casi d'uso, come ad esempio:
In quali casi è meglio evitare di usarli?
Sono singolarmente terribile a combattere la calvizie, la rimozione della neve, la riparazione della pompa di calore, facendo un soufflé, ecc
:-)
Ci sono dell'impatto sul rendimento evidenti da considerare quando usando qualcuno di loro?
Le interfacce, per definizione, non hanno "impatti sulle prestazioni" - sono semplicemente una descrizione di un'API.
Non sono a conoscenza del fatto che lo SpannableString
è notevolmente più lento di SpannedString
in qualsiasi operazione particolare. Tuttavia, SpannableStringBuilder
(che consente di manipolare il testo in aggiunta agli span che formattano quel testo) potrebbe essere un po 'più lento di SpannableString
o SpannedString
per varie cose. Tuttavia, le differenze di prestazioni sono sufficienti per dipendere dall'uso.
Dato che i documenti ufficiali sono silenziosi, come hai ottenuto queste informazioni? Fonte manuale che esplora in modo hardcore? – Pacerier
@Pacerier: non sono sicuro di quale parte di questa risposta ti riferisci. Ad esempio, la gerarchia di classi descritta in questa risposta proviene in gran parte dalla documentazione, in particolare da JavaDocs. Viceversa, la mancanza di utilità di queste cose per combattere la calvizie deriva dall'osservazione personale. – CommonsWare
@CommonsWare, quindi vuol dire che una stringa con emoticon intermedie sarebbe considerata una spannevoleStringa e non una normale. perché sto affrontando un enorme ritardo con 'setText (my_string)' quando 'my_string' ha emoticon in esso (come quello di watsapp) rispetto alla stringa normale .. (che ha solo testo normale) gentilmente getta un po 'di luce ... in qualche modo ho creduto che gli smille non siano altro che testo (unicode) solo – eRaisedToX