Qual è lo scopo di queste interfacce?
CharSequence
è un'interfaccia Java standard che rappresenta una sequenza di caratteri. String
è l'implementazione concreta più comunemente usata di CharSequence
, seguita da StringBuilder
.
Spanned
è un CharSequence
con "intervalli" che indica la formattazione da applicare a parti del testo, dove quegli intervalli non possono essere modificati.
Spannable
è un Spanned
, che aggiunge la possibilità di modificare gli intervalli (per aggiungere o rimuovere la formattazione), ma non per modificare il testo stesso.
SpannedString
è un'implementazione concreta Spanned
dell'interfaccia.
SpannableString
è un'implementazione concreta Spannable
dell'interfaccia.
in quali scenari è più comune usarli?
Quando c'è un metodo che ne restituisce uno (ad esempio, getText()
su un EditText
) o quando c'è un metodo che ne prende uno come parametro (ad esempio, setText()
su a TextView
).
Il tuo caso di utilizzo citato Html.fromHtml()
è forse il più comune nello sviluppo Android convenzionale, poiché un TextView
con a Spanned
è molto più leggero di un WebView
. Tuttavia, ci sono altri casi d'uso, come:
In quali casi è meglio evitare di utilizzarli?
Sono straordinariamente terribili nel combattere la calvizie, la rimozione della neve, la riparazione della pompa di calore, la preparazione di un soufflé, ecc.
:-)
Ci sono evidenti impatti sulle prestazioni da considerare quando si utilizza uno di essi?
Le interfacce, per definizione, non hanno "impatti sulle prestazioni": sono semplicemente una descrizione di un'API.
Non sono a conoscenza che SpannableString
sia significativamente più lento rispetto SpannedString
a qualsiasi operazione particolare. Tuttavia, SpannableStringBuilder
(che consente di manipolare il testo oltre alle estensioni che formattano quel testo) potrebbe essere un po 'più lento di SpannableString
o SpannedString
per varie cose. Tuttavia, se le differenze di prestazioni sono sufficienti o meno importanti dipenderà dall'utilizzo.