Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从SpannableStringBuilder处获得SpannableStrings的最佳方式_Android_Performance_Spannablestring - Fatal编程技术网

Android 从SpannableStringBuilder处获得SpannableStrings的最佳方式

Android 从SpannableStringBuilder处获得SpannableStrings的最佳方式,android,performance,spannablestring,Android,Performance,Spannablestring,我在一个类似wiki的解析器中工作,该解析器为一组标记创建范围。它正在工作,但在令牌迭代器中,我经常需要将SpannableStringBuilder上的部分结果转换为SpannableString。这是一个非常频繁的调用,所以我在寻找最有效的解决方案,避免创建额外的对象 目前我正在使用 SpannableStringBuilder stuff=complex_routine_that_builds_it(); SpannableString result=SpannableString.val

我在一个类似wiki的解析器中工作,该解析器为一组标记创建范围。它正在工作,但在令牌迭代器中,我经常需要将
SpannableStringBuilder
上的部分结果转换为
SpannableString
。这是一个非常频繁的调用,所以我在寻找最有效的解决方案,避免创建额外的对象

目前我正在使用

SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
然而,这个
valueOf
调用内部构建了一个
SpannableString
类的从头开始,执行
toString
和一个循环来复制分配的
span


正如
SpannableStringBuilder
name所暗示的,我认为也许有一种更快的方法可以从构建器获取
SpannableString
。这是真的吗?

当您可以直接使用
文本视图时,无需将
SpannableStringBuilder
转换为
SpannableString

SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
正如问题已经表明的那样,如果你必须这样做的话,你可以进行转换

SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
<> P>但是你应该考虑一下为什么你需要转换?只需使用原始的
SpannableStringBuilder

vs 这两者之间的区别类似于
String
StringBuilder
之间的区别。
String
是不可变的,但是您可以在
StringBuilder
中更改文本

类似地,
SpannableString
中的文本是不可变的,而
SpannableStringBuilder
中的文本是可变的。但需要注意的是,这只适用于文本。它们两个上的跨距(即使是
SpannableString
)都可以更改

相关的


如果你的文本中有一些span,那么你需要的就是android.text.span。我现在明白了,名称
SpannableStringBuilder
让我很困惑,我习惯于使用
StringBuffer
然后在最后得到一个
String
,并且没有意识到
SpannableStringBuilder
也实现了
span
Charsequence
,等等。。。生成器对我来说很方便,因为解析器对传入的字符串执行大量操作,以删除标记并创建许多不同的跨度:URL、颜色、大小等等。。。基本上,我正在重写(非常)慢的
Html。fromHtml
好主意,我不知道为什么,但这里95%的同伴使用fromHtml,即使输入不是Html:他们首先构建人工Html,然后调用fromHtml,我找不到比这更愚蠢的东西了,如果你看一下Html.java源代码,你就会想死。。。它将字符串解析成一个XML SaxParser(!),然后使用一个100kb的库Tagsoop,其中包含无数正则表达式,用于检查格式是否良好、XML模式等。。。。只支持粗体、斜体、标题和颜色,我用了大约150行,速度快了10倍!