我已经为Android开发了自己的语法高亮显示库,它工作得很好,但问题是它减慢了输入速度。
我尝试使用AsyncTask在后台执行正则表达式,然后应用必要的颜色,但它仍然减慢了键入过程。
目前,它读取整个EditText,我想改为获取文本光标所在的行,获取该行CharSequence,然后在该行上执行正则表达式,而不是整个文档,但我真的不知道如何才能获得用户正在处理的行:(。
发布于 2011-07-23 03:27:36
除非您只执行单行regexn/突出显示,否则您提出的策略可能不起作用。例如,如果不扫描多行,您可能无法判断是否处于多行注释中。:-)
如果您尚未执行此操作,请使用Traceview确定速度减慢的具体位置。也许你可以优化足够多的其他东西。例如,也许您正在动态编译所有的Pattern对象,而不是静态地定义它们。
除此之外,我认为一个典型的模式是只在用户暂停时应用语法突出显示。实现这一点的一种可能方式是:
步骤1:在每次文本更改时(您可能已经连接上了),postDelayed()一个Runnable,并将从SystemClock.uptimeMillis()检索到的时间戳保存在EditText子类的一个数据成员中(或者在您拥有语法着色逻辑的任何地方)。出于这个回答的目的,我将把您在postDelayed()中使用的延迟期称为DELAY。
步骤2:Runnable将来自SystemClock.uptimeMillis()的当前时间与上次文本更改的时间进行比较。如果时间差小于DELAY,您就知道用户在计划此Runnable时和现在之间输入了某些内容,因此您什么也不做。然而,如果时间差为DELAY,你就会运行你的语法着色逻辑。
这样,在用户暂停之前,您可以跳过应用语法着色,从而不会中断他们的键入。您可以调整DELAY,或者将其设置为可配置。
顺便说一句,您计划将其作为开源库发布,对吧?:-)
https://stackoverflow.com/questions/6794922
复制相似问题