【发布时间】:2015-04-23 14:49:21
【问题描述】:
目前,Android 的 EditText 在处理大量文本(10000+)时非常慢。看起来这种放缓部分是由于 EditText 支持跨度,主要是由于 EditText 正在计算每行的宽度,这非常昂贵。有没有比 EditText 更快的替代品,或者有什么方法可以优化它以使其可用?
编辑:方法跟踪如下:
android.text.StaticLayout.generate: 99.1% CPU time inclusive, 8.8% exclusive (1 call)
android.text.Layout.getParagraphSpans: 28% inclusive, 1.1% exclusive (4686 calls)
android.text.MeasuredText.setPara: 20.6% inclusive, 1.6% exclusive (2343 calls)
android.text.MeasuredText.addStyleRun: 18.6% inclusive, 1.1& exclusive (2343 calls)
android.text.SpannableStringBuilder.getSpans: 15% inclusive (of parent calls), 56.7% inclusive (of all calls, 47.3% of which are from android.text.Layout.getParagraphSpans, 26% are from android.text.MeasuredText.setPara, 26% are from android.text.StaticLayout.generate)
【问题讨论】:
-
这也是我正在探索的一个问题。我的帖子提供了一些解决方案(尽管没有一个是足够的)我提出并测试了:stackoverflow.com/questions/29801232/…
-
也许你可以设置
singleLine="true"这样它就不必渲染线宽了?在您滚动之前,它也不会渲染任何超出边距的内容,至少它不应该。 -
@AaronGillion 确实提高了性能(尽管仍然没有达到可用的水平),但是它不允许进行多行编辑,这是我需要的。
-
试试 android:hardwareAccelerated="false"。它可能是出于 EditText 的能力。
-
EditText 不是为这个用例设计的。它是为输入几行文本而设计的。您需要为此创建一个自定义视图。这真的不应该让您感到惊讶,您认为文字处理器使用 Windows 中的内置文本工具吗?如果你有一个极端的用例,你需要自己做更多的工作。
标签: android performance android-edittext textview