Вызов lifecycle.addObserver из абстрактного класса Kotlin - PullRequest
0 голосов
/ 06 августа 2020

У меня есть абстрактный класс, реализующий DefaultLifecycleObserver. Я хотел бы вызвать lifecycle.addObserver(this) из блока init, но он говорит: «Утечка 'this' в конструкторе неоконечного класса MyAbstractClass» .

Мой код:

abstract class MyAbstractClass(protected val activity: AppCompatActivity) : DefaultLifecycleObserver {
    init {
        activity.lifecycle.addObserver(this)
    }
  .
  .
  .
}

Я могу переместить эту строку кода в блок инициализации каждого последнего класса, расширяющего этот абстрактный класс, но мне не нравится эта идея, особенно потому, что я хочу гарантировать, что каждый новый класс, который будет Расширение MyAbstractClass в будущем также будет называть его. Есть ли лучшее место, чтобы вызвать это, не создавая утечки?

1 Ответ

1 голос
/ 07 августа 2020
• 1000 После этого вы можете сразу начать наблюдение. Однако вам придется сделать activity publi c. Определив его в таком расширении, ваши подклассы могут вызывать это и возвращать сами себя, чтобы вы могли связать его с вызовами конструктора.
fun <T: MyAbstractClass> T.alsoBegin(): T {
    activity.lifecycle.addObserver(this)
    return this
}

val foo = SomeImplementation(myActivity).alsoBegin()
...