Android开发:高效的语法突出显示技巧?

时间:2011-07-22 19:13:03

标签: android performance syntax syntax-highlighting

我已经为Android开发了自己的语法高亮库,它运行良好,但问题是它减慢了输入速度。

我尝试使用AsyncTask在后台执行正则表达式,然后应用necassary颜色,但它仍然减慢了打字过程。

目前,它读取整个EditText,我想到的是获取文本光标所在的行,获取该行CharSequence然后在该行上执行正则表达式而不是整个文档,但我真的不知道如何我可以得到用户正在处理的行:(。

1 个答案:

答案 0 :(得分:4)

除非您只进行单行正则表达式/突出显示,否则您提出的策略可能无效。例如,如果没有扫描多行,你可能无法判断你是否处于多行注释中。 : - )

如果您还没有这样做,请使用Traceview来确定减速的具体位置。可能你可以优化足够的其他东西。例如,您可能正在动态编译所有Pattern个对象,而不是静态定义它们。

除此之外,我认为典型的模式是仅在用户暂停时应用语法突出显示。实现这一目标的一种可能方式是:

步骤1:在每次文字更改(您可能已经加入)时,postDelayed()一个Runnable并将SystemClock.uptimeMillis()中检索到的时间戳保存在EditText的数据成员中{1}}子类(或者您拥有语法着色逻辑的任何地方)。出于本答案的目的,我将使用postDelayed()作为DELAY来表示您使用的延迟期。

步骤2:RunnableSystemClock.uptimeMillis()的当前时间与上次文本更改的时间进行比较。如果时差小于DELAY,您就会知道用户在安排此Runnable之后输入了一些内容,现在就不做任何操作。但是,如果时差> gt {= DELAY,则会运行语法着色逻辑。

这样,您可以跳过应用语法着色,直到用户暂停,从而不会中断他们的输入。您可以调整DELAY,也可以将其设置为可配置。

顺便说一下,你 计划将其作为一个开源库发布,对吗? : - )