2016-07-14 3 views
0

RxAndroid를 더 잘 이해하기 위해 RxAndroid를 사용하여 유용한 예가 많이 들어있는 this Repo이 발견되었습니다. 특히 Retrofit과 함께 사용하는 것이 좋습니다.개조를 사용하여 백그라운드에서 RxAndroid http 요청

그래서 내가 this repo의 일부를 보았을 때 백그라운드에서 실행중인 것으로 보이는 버튼을 클릭하여 http 호출을 할 수 있습니까?

액티비티/프래그먼트를 표시해야하는 동시에 백그라운드에서 http 호출을 수행하고받은 경우 데이터를 표시하려면 어떻게해야합니까? 내가 ListView를가 즉시 HTTP 호출에 의해 수신 된 데이터를 포함하는이 조각을 시작하면

그래서 예를 들어 나는 ONSTART

@Override 
public void onStart() { 
    super.onStart(); 

    pomagistoService 
      .getAgenda() 
      .subscribeOn(Schedulers.newThread()) // <- run in background right? 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<List<Appointment>>() { 
       @Override 
       public void onCompleted() { } 

       @Override 
       public void onError(Throwable e) { } 

       @Override 
       public void onNext(List<Appointment> appointments) { 
        // show data in ListView 
       } 
      }); 
} 

을 가진이 조각이있다.

이제 궁금한 점이 있습니다 : 이 http 호출은 백그라운드에서 실행됩니까?

조각이 나타날 때 즉시있는 데이터 때문에이 질문을하고 있습니다. 따라서 실제로 볼 수 없습니다.

+1

예 HTTP 호출이 백그라운드에서 실행됩니다. –

+0

@AmitShekhar, http 호출에 5 초가 걸리며 조각이 표시 되려면 5 초가 걸리지 않습니까? 조각이 방금 나타납니다 (데이터 없음)? –

+0

당신은 onNext()에서 fragment listview를 업데이트해야합니다. –

답변

0

일반적으로 네트워크 요청의 경우 Schedulers.newThread()이 아니라 Schedulers.io()을 사용해야합니다. 또한 요청이 실행되기 전에 약간의 지연 시간을 얻고 데이터없이 조각을 볼 수있는 기회를 얻으려면 .delay(5, TimeUnit.SECONDS)을 사용하여 전화하기 전에 5 초간 지연하십시오.

0

subscribeOn(Schedulers.io())을 사용하는 경우 RxJava가 백그라운드에서 작업을 수행 할 것이라고 말하고 있습니다 (다른 스레드). Schedulers.io()은 네트워킹과 같은 I/O 작업에 주로 사용되므로 로컬에서 실행되는 긴 처리 작업에는 Schedulers.computation()을 사용할 수 있습니다.

그리고 observeOn(AndroidSchedulers.mainThread())을 사용하면 주 스레드에서 최종 결과를 수신하여 UI 이벤트를 표시하거나 UI 이벤트를 처리 할 수 ​​있다고 말합니다.

subscribeOn()observeOn()을 사용하면 흔히 볼 수없는 혼란이 있으므로 쉽게 만들 수 있습니다. UI에 반영하기 위해 항상 메인 스레드에서 결과를 관찰하고 그렇지 않으면 케이스에 맞게 사용하고 싶습니다.

관련 문제