Яке призначення цих інтерфейсів?
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
для різних речей. Чи достатньо різниці в продуктивності для того, щоб мати значення, залежатиме від використання.