이벤트는 메인 스레드에서 로드되고 실행되며, 메인 스레드의 첫 번째 이벤트가 완료되지 않으면 두 번째 이벤트로 넘어가는데, 메인 스레드의 다른 프로그램들처럼 이전 이벤트가 처리가 끝날 때까지 기다린 후 다음 프로그램이나 이벤트를 처리합니다.
위 내용은 제가 직접 어떤 대상을 캡슐화했고, 그 대상에 제가 직접 사건을 캡슐화한 것입니다.
저는 이미지 주석 부분과 같은 이벤트 구독 방식으로 데이터를 처리합니다.
제가 구독한 이벤트가 read txt 파일이었고, 제 txt 파일이 50,000줄이라서 이벤트 메서드가 50,000번 트리거되었기 때문입니다.
그런데 프로그램을 실행했을 때, 인터페이스가 정지 상태에 빠져 있었고, 분명 문제가 있다는 걸 알았어요.
처음에는 조작된 UI 조작이 가짜 죽음을 일으킨 것이라고 생각했습니다.
그 후 단계적으로 데이터를 추가했을 때 이미 정지 상태에 들어간 상태임이 밝혀졌습니다.
왜??? 마지막으로 인터넷에서 알게 된 건, 이벤트가 메인 스레드에 있고, 첫 번째 이벤트가 처리되지 않으면 다음 이벤트 실행이 차단된다는 것입니다.
솔직히 말해, 5만 번의 이벤트가 프로그램을 차단하게 만들었고, 그 후 나는 동면 상태에 빠졌다.
용액:
많은 이벤트 메서드를 실행하지 않는 일부 단순 이벤트는 이벤트 메서드에 직접 기록할 수 있습니다.
많은 이벤트 메서드가 호출될 경우, 소켓이나 httplistener 같은 스레드를 열어 처리해 주시길 바랍니다. (데이터 양이 적고 보이지 않지만, 데이터가 많아지면 바로 사라집니다, 하하)
|