RxJavaSamples icon indicating copy to clipboard operation
RxJavaSamples copied to clipboard

关于Subscriber.onStart()何时被调用的问题

Open lisuperhong opened this issue 8 years ago • 4 comments

大大你好,你写的文章上说Subscriber.onStart()总是在 subscribe所发生的线程被调用,但下面的代码并没有报错: String baseUrl = "https://api.douban.com/v2/movie/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();

    ClientApi clientApi = retrofit.create(ClientApi.class);
    clientApi.getTopMovies(0, 5)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<MovieEntity>() {

                @Override
                public void onStart() {
                    progressBar.setVisibility(View.VISIBLE);
                }

                @Override
                public void onCompleted() {
                    progressBar.setVisibility(View.GONE);
                    Toast.makeText(context, "完成网络请求!", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onError(Throwable e) {
                    text.setText(e.getMessage());
                }

                @Override
                public void onNext(MovieEntity movieEntity) {
                    text.setText(movieEntity.toString());
                }
            });

我使用subscribeOn设置subscribe()在IO线程,直接在onStart()方法中显示progressBar,按理说progressBar没有在主线程执行,应用会奔溃才对,但是一切正常

lisuperhong avatar Jul 08 '16 11:07 lisuperhong

onStart()应该是跟随你当前线程的,如果你当前在主线程的话,肯定不会异常

ShanZha avatar Jul 18 '16 09:07 ShanZha

progress是貌似是可以在线程中使用的唯一的一个VIEW

loulousky avatar Aug 08 '16 04:08 loulousky

RXJAVA 可以指定ONSTART的使用线程

loulousky avatar Aug 08 '16 04:08 loulousky

确实有这个问题,是什么原因,指定是子线程,但onStart也可以显示dialog或者其他的loading

mattxzhang avatar Aug 31 '16 03:08 mattxzhang