项目中使用到RxJava,为避免可能因使用不当而出现内存泄漏的问题,使用了AutoDispose来优雅的实现RxJava自动解绑

AutoDispose是uber的一个开源库。

//kotlin

observable.subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
           //使用AutoDispose优雅的实现RxJava自动解绑
          .`as`(AutoDispose.autoDisposable
(AndroidLifecycleScopeProvider.from(context,Lifecycle.Event.ON_DESTROY)))//OnDestory时自动解绑
          .subscribe(observer)

然而在使用过程中报了错:

e: F:\project\work\App_first\calendar\Calendar_Android\httplibrary\src\main\java\com\fleet\httplibrary\network\RetrofitUtil.kt: (53, 88): None of the following functions can be called with the arguments supplied: 
public final fun from(p0: (() -> Lifecycle)!, p1: ((Lifecycle.Event) -> Lifecycle.Event!)!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public final fun from(p0: (() -> Lifecycle)!, p1: Lifecycle.Event!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public final fun from(p0: Lifecycle!, p1: ((Lifecycle.Event) -> Lifecycle.Event!)!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: Lifecycle!, p1: Lifecycle.Event!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: Lifecycle!, p1: CorrespondingEventsFunction<Lifecycle.Event!>!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: LifecycleOwner!, p1: Lifecycle.Event!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: LifecycleOwner!, p1: CorrespondingEventsFunction<Lifecycle.Event!>!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
:httplibrary:compileReleaseKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':httplibrary:compileReleaseKotlin'.
> Compilation error. See log for more details

查阅资料,发现

      使用AutoDispose时,在0.8.0以后的版本需要先将项目迁移至AndroidX,否则会提示错误。

None of the following functions can be called with the arguments supplied:

而我使用的是:

com.uber.autodispose:autodispose-android-archcomponents:1.0.0-RC2

操作:改为0.8.0版本。

本以为解决了,结果编译不通过,,,what???,看来报错主要是在

:compileReleaseKotlin

又一番查找,终于找到问题的根本原因了,因为使用了Kotlin,所以添加的依赖就不对。正确的依赖是:

    /*AutoDispose相关依赖*/
    implementation 'com.uber.autodispose:autodispose-kotlin:0.8.0'
    implementation 'com.uber.autodispose:autodispose-android-archcomponents-kotlin:0.8.0'

编译,通过!!!

所以一旦出现compileReleaseKotlin这种报错,就要看添加的依赖是否是Kotlin版本。

注意:如果不将项目迁移至AndroidX,请不要使用新版本!使用0.8.0这个版本即可。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐