【问题标题】:Will passing lambdas to Observable.subscribe in kotlin result in memory leaks? [duplicate]将 lambdas 传递给 Kotlin 中的 Observable.subscribe 会导致内存泄漏吗? [复制]
【发布时间】:2018-02-14 22:25:27
【问题描述】:

请参阅以下 kotlin 代码:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        val disposable = Observable.interval(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
                               .subscribe { textView.text = it.toString }
    }

}

在这里,我在 subscribe 方法中传递 lambda 表达式,而不是匿名内部类。那么是否需要调用disposable.dispose() 以防止内存泄漏?否则 lambda 表达式不会保留对 MainActivity 类实例的隐式引用。

如果我确实需要处理它,最好的方法是什么?为什么?

【问题讨论】:

    标签: android lambda memory-leaks kotlin rx-java


    【解决方案1】:

    我在 Observable.subscribe() 中添加了一个记录器,如下所示:

    class MainActivity : AppCompatActivity() {
    
            override fun onCreate(savedInstanceState: Bundle?) {
                val disposable = Observable.interval(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread()).subscribe {
                                    Log.d(TAG, "Interval:" + it.toString())
                                    textView.text = it.toString 
                                }
            }
    
        }
    

    并注意到即使在按返回键退出应用程序后,observable 仍会继续运行。所以我在 onDestroy() 中添加了以下代码:

    override fun onDestroy() {
        disposable.dispose()
        super.onDestroy()
    }
    

    现在一切都按预期进行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-11
      • 2012-05-29
      • 2019-06-11
      • 1970-01-01
      • 2021-03-23
      • 2021-09-25
      • 2014-12-08
      • 1970-01-01
      相关资源
      最近更新 更多