Mục đích của các giao diện này là gì?
CharSequence
là giao diện Java chuẩn trình bày chuỗi ký tự. String
là triển khai cụ thể được sử dụng phổ biến nhất của CharSequence
, tiếp theo là StringBuilder
.
Spanned
là CharSequence
với "nhịp" chỉ định định dạng để áp dụng cho các phần của văn bản, trong đó các nhịp đó không thể sửa đổi được.
Spannable
là Spanned
, thêm khả năng sửa đổi các nhịp (để thêm hoặc xóa định dạng), nhưng không phải để sửa đổi văn bản.
SpannedString
là triển khai cụ thể của giao diện Spanned
.
SpannableString
là triển khai cụ thể của giao diện Spannable
.
trong trường hợp này, điều thường xảy ra khi sử dụng chúng là gì?
Khi có một phương pháp mà trả về một (ví dụ, getText()
trên một EditText
) hoặc khi có một phương pháp mà mất một như một tham số (ví dụ, setText()
trên TextView
). 
trường hợp trích dẫn của bạn sử dụng Html.fromHtml()
có lẽ là phổ biến nhất trong việc phát triển Android thông thường, như một TextView
với một Spanned
là nhẹ hơn trọng lượng hơn là một WebView
.Tuy nhiên, có những trường hợp sử dụng khác, chẳng hạn như:
Trong trường hợp nào tốt nhất là tránh sử dụng chúng?
Họ này đặc biệt là khủng khiếp tại chống hói, dọn tuyết, sửa chữa máy bơm nhiệt, làm cho một Souffle vv
:-)
Có bất kỳ tác động hiệu suất rõ ràng để được xem xét khi sử dụng bất kỳ một trong số họ?
Giao diện, theo định nghĩa, không có "tác động hiệu suất" - chúng chỉ là mô tả về API.
Tôi không biết rằng SpannableString
chậm hơn đáng kể so với SpannedString
tại bất kỳ hoạt động cụ thể nào. Tuy nhiên, SpannableStringBuilder
(cho phép thao tác văn bản ngoài các nhịp có định dạng văn bản đó) có thể chậm hơn một chút so với SpannableString
hoặc SpannedString
cho nhiều thứ khác nhau. Dù sự khác biệt về hiệu suất có đủ để quan trọng hay không sẽ phụ thuộc vào cách sử dụng.
Vì tài liệu chính thức ở chế độ im lặng, Bạn nhận được những thông tin này từ đâu? Thủ công nguồn duyệt theo cách hardcore? – Pacerier
@Pacerier: Tôi không chắc chắn phần nào của câu trả lời này mà bạn đang đề cập đến. Ví dụ, phân cấp lớp được mô tả trong câu trả lời này chắc chắn nhất xuất phát từ tài liệu, đặc biệt là các JavaDocs. Ngược lại, sự thiếu tiện ích của những thứ này để chống lại chứng hói đầu đến từ quan sát cá nhân. – CommonsWare
@CommonsWare, do đó, điều đó có nghĩa là một chuỗi có biểu tượng mặt cười ở giữa sẽ được coi là 'spannableString' và không phải là bình thường. vì tôi đang đối mặt với độ trễ lớn với 'setText (my_string)' khi 'my_string' có biểu tượng mặt cười trong nó (giống như của watsapp) so với chuỗi bình thường .. (mà chỉ có văn bản đơn giản) vui lòng ném một số ánh sáng ... bằng cách nào đó tôi tin rằng smilleys là gì, nhưng văn bản (unicode) chỉ – eRaisedToX