2017-09-06 3 views
0

Voir le code Kotlin suivant:Passera lambdas à Observable.subscribe dans kotlin entraînera des fuites de mémoire?

class MainActivity : AppCompatActivity() { 

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

} 

Ici, je suis je passe une expression lambda dans la méthode s'abonner au lieu d'un intérieur anonyme CLASSIFICATION DES. Alors est-il nécessaire d'appeler disposable.dispose() afin d'éviter les fuites de mémoire? Ou l'expression lambda ne gardera pas une référence implicite à l'instance de la classe MainActivity.

Et si je dois l'éliminer, quel est le meilleur moyen et pourquoi?

Répondre

0

J'ai ajouté un enregistreur au Observable.subscribe() comme suit:

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 
          } 
     } 

    } 

et a remarqué que, même après avoir quitté l'application en appuyant sur la touche retour, le gardé observable en cours d'exécution. Donc, j'ai ajouté le code suivant à OnDestroy():

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

et maintenant tout fonctionne comme prévu