ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Thread IO UI 혼용 문제 증상
    Search: Java Java 2022. 8. 7. 07:59

     

    예제 구성

    Android환경에서 RxJava에 Observable를 이용한 비동기 처리 방식.
    작업 Thread는 SchedulersIO로 설정하고 처리된 결과를 SchedulersMainthrad(=UI)로 보내 최종 처리하는 구조.

    Disposable data1Task = Observable.fromCallable(()->{
    	//... work ...
        return "workcomplete"
    	})
        //Observable이 실행되는 스레드는 subscribeOn() 함수에서 설정하고 처리된 결과를 observeOn() 함수에 설정된 스레드로 보내 최종 처리합니다.
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(rststr -> {
            data1Task.dispose();
            qv("work result: " + rststr);
        }, throwable -> qv("ec: " + throwable.toString()));

     

     

    증상

    위 구성에서 작업Thread에서 TextView에 text를 변경해 화면에 보여줄 경우 잘 보여질 수 있다(문제 없는 것 처럼 보임).

    그러나 화면 출력이 잘 되어 오다가 IO작업을 할 때 응답없이 무한 대기하는 이상 증상이 발생한다.
    java.net.HttpURLConnection관련 기능을 사용할 때 접속이나 읽기 응답을 받을 수 없는 상태가 된다.
    응답이 무한대로 기다려야 하는 상태에서 Android 작업창 전환해서 돌아오면 즉시 응답되어 있는 증상이 나타난다.

    응답 없다가 앱 전환 후 붉은 색 화살표 부분에서 다시 진행된 응답과 함께 오류 출력.

     

    결론

    main thread (ui) 와 work thread (io)의 구분을 명확히 하여 작업 배치를 하여야 한다.

    'Java' 카테고리의 다른 글

    InputStream to Byte Array, ByteBuffer  (0) 2022.08.11
    getPath(), getAbsolutePath(), getCanonicalPath()  (0) 2022.08.08
    RxJava subscribeOn, observeOn  (0) 2022.08.07
    Callable, Runnable 차이  (0) 2022.08.07
    RxJava HttpUrlConnection  (0) 2022.08.07
    RxJava 스케쥴러(Scheduler) 종류  (0) 2022.08.07
    HttpURLConnection  (0) 2022.08.07
    RxJava Observable emitter Ex  (0) 2022.08.06

    댓글