从SpannableStringBuilder获取SpannableString的最佳方法

rup*_*pps 17 performance android spannablestring

我正在使用类似wiki的解析器,为一组标记令牌创建跨度.它正在工作,但在令牌迭代器中我经常需要将a上的部分结果转换SpannableStringBuilder为a SpannableString.这被称为非常频繁,所以我是最有效的解决方案,并避免创建额外的对象.

目前我正在使用;

SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
Run Code Online (Sandbox Code Playgroud)

然而,这个valueOf调用在内部构建了SpannableString一种从头开始,执行a toString和循环来复制分配spans.

正如SpannableStringBuilder名字所暗示的,我认为,也许有一种更快的方式来获得SpannableString从建设者.这是真的吗?

Sur*_*gch 29

当您可以直接使用它时,无需将a转换SpannableStringBuilder为a SpannableString,如TextView:

SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
Run Code Online (Sandbox Code Playgroud)

正如问题已经表明的那样,如果你绝对不得不做的话,你可以进行转换

SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
Run Code Online (Sandbox Code Playgroud)

但你应该考虑为什么你甚至需要进行转换?只需使用原件SpannableStringBuilder.

SpannableString VS SpannableStringBuilder

这两者之间的差异类似于String和之间的差异StringBuilder.A String是不可变的,但您可以更改文本StringBuilder.

类似地,a中的文本SpannableString是不可变的,而a中的文本SpannableStringBuilder是可变的.但值得注意的是,这仅适用于文本.两者(甚至是SpannableString)的跨度都可以改变.

有关