将传递lambda到Observable.subscribe in kotlin导致内存泄漏?
请参阅以下kotlin代码:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val disposable = Observable.interval(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread()) .subscribe { textView.text = it.toString } } }
在这里,我正在传递一个lambda表达式,而不是一个匿名的内部类。 那么是否需要调用disposable.dispose()
以防止内存泄漏? 或者,lambda表达式不会保留对MainActivity类的实例的隐式引用。
如果我确实需要处理它,那么最好的方法是什么?为什么?
我向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 } } }
并注意到,即使退出应用程序后按下后退键,观察继续运行。 所以我将下面的代码添加到onDestroy()中:
override fun onDestroy() { disposable.dispose() super.onDestroy() }
现在一切都按预期工作