Расскажите про утечку Activity / Context

Утечка активити/контекста в Android это утечка памяти, вызванная тем что активити/контекст уже уничтожены, но на них все еще есть внешние ссылки(например в статик переменной). В итоге сборщик мусора не может удалить эту активити/контекст, хотя он по сути уже бесполезен, тк onDestroy() была вызвана. И так как активити и контекст это тяжелые объекты, которые занимают много места в памяти, то такая утечка в лучшем случае приведет к ухудшению быстродействия, а если таких утечек несколько то приложение вообще может вылететь, так как для него просто не хватит места в памяти.

При этом стоит понимать, что активити/контекст не обязательно должны напрямую лежать в статик переменной, они могут находится внутри другой переменной, которая будет в статике.

Вот пример того, как не надо делать:

open class Connection(
    private val mActivity: Activity,
    input: BufferedReader,
    output: PrintWriter,
    val host: Host,
    private val mSendListener: SendListener,
    receiveListener: ReceiveListener
)

object Const {
    @JvmStatic
    var currentConnection: Connection? = null
}
Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *