代码之家  ›  专栏  ›  技术社区  ›  Amir Khorsandi

我应该在单例类(Android RxJava 2)中处理一次性文件吗

  •  8
  • Amir Khorsandi  · 技术社区  · 8 年前

    当我 subscribe({}) 对于单例类中的可观测数据,是否需要调用 .dispose() 方法在某个点上如果是,何时何地?因为在应用程序运行之前,一个单例将一直存在。 像这样(科特林):

    @Singleton
    class MySingletonClass @Inject constructor(
        private val api: MyAPIManager
    ) {
    
    fun fetchData() {
    
            //subscribed inside the Singleton
            api.service.getSomeDataFromAPI()
            .toRxObservable()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ 
                       //do something internally with response
                       },
                       {
                       //handle error internally
                       })
    
    }
    

    这个 subscribe() 方法返回 Disposable 是的。

    我的主要问题是:我需要打电话给 dispose() 完全?因为我认为我只能在应用程序完成或终止时调用它,这是不必要的。

    3 回复  |  直到 7 年前
        1
  •  2
  •   StackOverthrow    8 年前

    这里(潜在的)更大的问题是,您的singleton正在Android组件的生命周期之外工作如果您的singleton是静态的或由 Application ,则当应用程序位于后台时,它可能会突然终止如果这不是问题,那么你的问题的答案是 不,您不需要处理订阅。 但是,当你的应用程序在后台运行时,你仍然应该小心工作,除非用户希望这样做(如果他们这样做了,它可能应该在 Service 或按计划运行) 应用程序 而虚拟机可能会在用户察觉到应用程序“关闭”后持续很长一段时间,过度的资源消耗可能导致糟糕的评级和卸载。

        2
  •  -1
  •   Ahmet Zorer    8 年前

    你可以用优步 autoDispose 图书馆

        myObservable 
    .doStuff() 
    .as(autoDisposable(this)) // The magic 
    .subscribe(s -> ...);
    
        3
  •  -2
  •   Asset Bekbossynov    8 年前

    是的,通常我把它放在 stop Presenter的函数,在 onStop() 活动方法