代码之家  ›  专栏  ›  技术社区  ›  ir2pid

使用复合包装的最佳实践是什么?

  •  0
  • ir2pid  · 技术社区  · 6 年前

                                   observable.......
                                   .subscribe(
                                    {
                                        utilModule.logI("net repo response")
                                        //cleanDisposables()//this causes HttpOk cancelled error
                                    },
                                    {
                                        utilModule.logI("no repo response" + it.message)
                                        //cleanDisposables()
                                    }
                            ))
        }
    
        private fun cleanDisposables() {
            //clean old network observables, dispose will prevent further observing
            utilModule.logI("disposing observables")
            if (!compositeDisposables.isDisposed) {
                compositeDisposables.clear()
            }
        }
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   tgrable    6 年前

    这可能是一个使用MVP设计模式的例子…

    presenter.kt
    fun dispose() {
        compositeDisposable.clear()
    }
    
    
    activity.kt
    override fun onDestroy() {
        super.onDestroy()
        presenter.dispose()
    }
    
        2
  •  1
  •   Stefano Mtangoo    6 年前

    CompositeDisposable .我愿意 clear onCleared 方法。

    public class MyViewModel extends AndroidViewModel {
        private MyRepo mRepo;
        private CompositeDisposable mDisposables = new CompositeDisposable();
    
    
        public MyViewModel(@NonNull Application application) {
            super(application);
    
            mRepo = MysRepo.getInstance(...);
        }
    
        public void loadData()
        {
            Disposable d = mRepo.getMyPeculiarData()
                    ...
                    .subscribe(...);
    
            mDisposables.add(d);
        }
    
    
        @Override
        protected void onCleared() {
            super.onCleared();
            mDisposables.clear();
        }
    
    }