소스 코드의 구문 강조 기능을 제공하는 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());
}
: 여기 내 코드가 어떻게 생겼는지의 거친 모델 (I 자바에서 내 응용 프로그램을 작성하지 않은)입니다. Android를 사용하면 화면을 회전 할 때 Android가 활동을 파괴하고 다시 생성된다는 것을 알게되었습니다. 사용자가이 작업을 수행 할 때 전체 소스 코드 파일을 강조 표시하고 싶지 않습니다. 강조 표시가 중간에있는 경우 간단히 중단 한 부분부터 선택하고 싶습니다. 어떻게해야합니까? 그것은 UI를 수정하기 때문에