Яке призначення цих інтерфейсів?
CharSequence- це стандартний інтерфейс Java, що представляє послідовність символів. Stringє найбільш часто використовуваною конкретною реалізацією CharSequence, а потім -StringBuilder .
Spanned це CharSequence "з розмахом", що вказує форматування, яке застосовується до частин тексту, де ці проміжки не можуть бути змінені.
Spannableє Spanned, додаючи можливість модифікувати інтервали (додати або видалити форматування), але не змінювати сам текст.
SpannedStringє конкретною реалізацією Spannedінтерфейсу.
SpannableStringє конкретною реалізацією Spannableінтерфейсу.
в яких сценаріях в основному їх використовують?
Коли існує метод, який повертає один (наприклад, getText()на an EditText), або коли існує метод, який приймає один як параметр (наприклад, setText()на a TextView).

Ваш цитований випадок використання Html.fromHtml(), мабуть, найпоширеніший у звичайній розробці Android, оскільки a TextViewз Spannedнабагато легшим за вагою, ніж a WebView. Однак є й інші випадки використання, такі як:
У яких випадках краще уникати їх використання?
Вони особливо жахливі в боротьбі з облисінням, видаленням снігу, ремонтом теплового насоса, виготовленням суфле тощо.
:-)
Чи є явні наслідки для продуктивності, які слід враховувати при використанні будь-якого з них?
Інтерфейси, за визначенням, не мають "впливу на продуктивність" - вони є лише описом API.
Я не знаю, що SpannableStringце значно повільніше, ніж SpannedStringпри будь-якій конкретній операції. Тим НЕ менше, SpannableStringBuilder(що дозволяє маніпулювати текст в доповненні до прольотах , що формат, текст) може також бути трохи повільніше , ніж SpannableStringабо SpannedStringдля різних речей. Чи достатньо різниці в продуктивності для того, щоб мати значення, залежатиме від використання.