Передача активити в статический метод
Я хочу создать синглтон в котором будут методы для оценки приложения в google play. Для таких метод мне нужен контекст, а для их новой библиотеки для отзывов и вовсе активити. Подскажите плиз, если я передам в свой синглтон activity для контекста, через параметр метода, и использовать его буду только там. Это будет вызывать утечку памяти или ещё что-то плохое?
object RateAppManager{
fun googlePlayInAppReview(activity: Activity?, reviewManager: ReviewManager) {
val requestFlow = reviewManager.requestReviewFlow()
requestFlow.addOnCompleteListener { request ->
if (request.isSuccessful) {
val reviewInfo = request.result
val flow = activity?.let { reviewManager.launchReviewFlow(it, reviewInfo) }
flow?.addOnCompleteListener { _ ->
}
} else {
activity?.let { showRateAppDialog(it) }
}
}
}
}
Ответы (1 шт):
Сама по-себе передача контекста в метод для использования его там же - нормальная практика.
Так как параметр метода это локальная переменная и она уничтожается по выходу из него, то ничего страшного в этом нет, но только в том случае, когда эта переменная не копируется (передаётся) за пределы метода.
В данном случае это не так: ссылка передаётся в анонимную реализацию слушателя и время её жизни теперь зависит от времени жизни этого объекта.
Я не знаю ни эту библиотеку, ни как вы её используете - поэтому не могу сказать будет у вас утечка или нет.
Утечка гарантирована если слушатель продолжит работать после выхода из активности, ссылку на которую он хранит.