2017-09-06 51 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() 
} 

,現在一切正在按預期