2017-11-13 4 views
0

긴 과정을 수행 할 때 표시되는 활동 표시기를 표시하고 싶습니다.Nativescript - 특정 코드 청크에서 ActivityIndicator가 작동하지 않습니다.

모델 사용 중 플래그를 true로 설정했습니다.

약속을 반환하는 메서드를 호출합니다. 약속 호출이 해결되면 내 '다음'처리기에서 busy 플래그를 false로 설정합니다.

약속이 해결 될 때까지 기다리면 활동 표시기 애니메이션이 표시되지만 기대하지 않습니다.

UI 설정이 올바른지 확인하고 작동하는지 확인했습니다.

작업이 nativescript-calendar 플러그인을 사용하고 있습니다. 몇 가지 캘린더 항목을 추가하고 있습니다.

내가하고있는 일을 주석 처리하고 조금만 자고 나서 resolve()라고 부르면 애니메이션이 작동했습니다.

따라서 Activity Indicator와 Promise 메커니즘이 올바르게 설정되었습니다.이 플러그인이 수행 중이므로 AI가 표시되지 않습니다.

이러한 문제가 발생할 수있는 원인은 무엇입니까?

나는 Promise 작업 코드를 실제로 편집했다. 약 1 초 동안 잠자고 달력 작업을 시작했다. 인공 지능을 1 초 동안 본 다음 얼어 버립니다.

캘린더 쓰기로 인해 AI가 정지하는 것 같습니다.

Promise 작업이 백그라운드에서 수행되고 전경 애니메이션을 적용해서는 안된다는 이해하에있었습니다.

답변

0

SQLite를 사용할 때 비슷한 문제가 발생했습니다.

명시 적으로 작업자에서 캘린더를 실행한다고 명시하지 않았으므로 UI ​​스레드 (메인 스레드)에 캘린더를 보관한다고 가정합니다.

UI 스레드에서 많은 양의 작업을 수행하면 눈에 띄는 지연/지연이 발생할 수 있습니다. 예를 들어, 작업 표시기를 호출 한 다음 스레드를 최대치로 처리하는 프로세스를 호출하면 프로세스는 작업 표시기가 화면에 그려지는 것을 끝내지 만 프로세스가 끝나면 표시되기 전에 바로 숨겨집니다.

이 문제를 해결하는 가장 좋은 방법은 코드를 작업자 (멀티 스레드 응용 프로그램)로 이동하고 성공 메시지에서 활동 표시기를 끄는 것입니다.

+0

약속에서 모든 캘린더 작업을하고 있습니다. 나의 약속은 Promises가 비동기 작업을 허용한다는 것이 었습니다 - 그래서 Promise의 몸체는 백그라운드에서 처리되고 있습니다 ... 그러나 그것은 내 부분에 대한 오해였습니다. – dashman

+0

@dashman 옙 그래서 약속에 대한 나의 이해는 기본적으로 실행 대기열에 코드를 삽입 할 준비가되었다는 것입니다. 기본적으로 js는 다른 스레드 언어와 같은 단일 스레드 언어입니다. 당신이 다른 스레드에서 물건을하고 싶다면 당신은 노동자를 사용해야 할 것입니다. – Roland