私は、ソースコードの構文ハイライトを提供するAndroidアプリを書いています。大きなファイルを高速に処理したいので、構文強調表示タスクをノンブロッキングにしました。私はUIを変更するので別のスレッドでタスクを実行することはできませんが、それはSpannableStringBuilder.setSpan()
何千回も呼び出すため、CPUを大量に消費します。Android:このシナリオで設定変更をどのように処理すればよいですか?
私がこの問題に遭遇したアプローチは、一度に小さなバッチの作業を行い、それらの間で、入力/レンダリングコードを実行させる作業を設計することでした。設定の変更を処理しようとしているときに、私が問題に遭遇しました
void onCreate() {
workLoop();
}
void workLoop() {
// For those of you familiar with C#, the actual code was like
// while (true)
// {
// DoSmallBatchOfCpuIntensiveWork();
// await Task.Yield();
// }
doSmallBatchOfCpuIntensiveWork();
Handler uiThreadHandler = new Handler(Looper.getMainLooper());
uiThreadHandler.post(() -> workLoop());
}
:ここに私のコードがどのように見えるかの大まかなモデルは、(私はJavaで私のアプリを書いていない)です。私は、あなたが画面を回転させるとAndroidがあなたのアクティビティを破壊して再作成することに気付きました。私はユーザーがこれを行うときに、ソースコードファイル全体を再強調したくない。私がハイライトの途中にいる場合、私は単に中止したところからピックアップしたいと思う。これをどのように達成するのですか?