2011-07-22 12 views
4

私はAndroid用の独自の構文ハイライトライブラリを開発しましたが、うまくいきましたが、問題はそれがタイピングを遅くすることです。Android開発:効果的な構文ハイライトのヒント?

私はAsyncTaskを使ってバックグラウンドで正規表現を実行してからnecassary色を適用しようとしましたが、それでもタイピングプロセスは遅くなりました。

現在、EditText全体を読み込んで、テキストカーソルがある行を取得し、その行を取得してからCharSequenceを実行して、文書全体ではなくその行で正規表現を実行しますが、どのように私は、ユーザーが:(に取り組んでいるラインを得ることができる。

任意のアイデア?

おかげで、 アレックス。

答えて

4

あなただけのシングルラインregexn /ハイライト、あなたの提案の戦略をやっている場合を除きたとえば、あなたは複数のラインのCOMにいるかどうかは分かりません複数の行を走査しなくてもよい。 :-)

まだ行っていない場合は、Traceviewを使用して減速が具体的にどこにあるかを特定します。十分な他のものを最適化できるかもしれません。たとえば、すべてのPatternオブジェクトを静的に定義するのではなく、その場でコンパイルしているとします。

それ以外では、ユーザーが一時停止したときにのみ構文の強調表示を適用するのが典型的なパターンだと思います。 ((あなたはおそらくすでににフックしている)すべてのテキストの変更には、postDelayed()RunnableとあなたのEditTextサブクラスのデータメンバにSystemClock.uptimeMillis()から取得したタイムスタンプを保存します。

ステップ#1:それを実現するための1つの可能な方法は次のようになりますシンタックスカラーリングロジックがあればどこでも)。この回答の目的のために、postDelayed()と使用する遅延期間をDELAYとします。

Runnableは、SystemClock.uptimeMillis()の現在の時刻と最後のテキスト変更の時刻を比較します。時差がDELAY未満の場合は、このRunnableが予定されていた時点でユーザーが何かを入力したことを知っているので、何もしないだけです。時間差> = DELAYの場合は、構文カラーリングロジックを実行します。

この方法では、ユーザーが一時停止するまで構文カラーリングを適用せずに、入力を中断しないようにします。 DELAYを調整するか、設定可能にすることができます。

ところでオープンソースライブラリとしてリリースする計画ですか? :-)

+0

あなたは実際に命を救っています!ありがとう、あなたの答えは私の問題の完璧な解決策です。私は、ライブラリが強調表示されていないことに驚いています。まともなものを作るのはかなり簡単です。あなたの質問に答えるには:私は自分のアプリでこのライブラリを使用しているので、わかりません。もう一度、ありがとう! – AlexPriceAP

+0

@AlexPriceAP:「ライブラリを強調表示するライブラリがなくてすごく驚きました。まともなものを作るのはかなり簡単です」 - ええ、私たちはすべて怠け者です。再利用を促進する。 :-) – CommonsWare

+0

Hehe:P。あなたの助けをもう一度ありがとう。驚くばかり! – AlexPriceAP

関連する問題