2017-09-06 29 views
0

参见下面的科特林代码:将lambdas传递给kotlin中的Observable.subscribe会导致内存泄漏?

class MainActivity : AppCompatActivity() { 

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

} 

在这里,我想过去在订阅方法而不是匿名内部classses lambda表达式。那么是否需要拨打disposable.dispose()以防止内存泄漏?或者,lambda表达式不会保留对MainActivity类的实例的隐式引用。

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

回答

0

我添加了一个记录到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() 
} 

,现在一切正在按预期