Я использую этот шаблон для создания синглтона, чтобы помочь мне в операциях с Firebase, но, к сожалению, это утечка памяти, вот мой код.
class FirebaseDataSource(private val db: FirebaseFirestore,
private val firebaseAuth: FirebaseAuth,
private val firebaseFunctions: FirebaseFunctions,
private val firebaseStorage: FirebaseStorage,
private val firebaseInstanceId: FirebaseInstanceId) {
companion object {
@Volatile
private var INSTANCE: FirebaseDataSource? = null
fun getInstance(db: FirebaseFirestore = FirebaseFirestore.getInstance(),
firebaseAuth: FirebaseAuth = FirebaseAuth.getInstance(),
firebaseFunctions: FirebaseFunctions = FirebaseFunctions.getInstance(),
firebaseStorage: FirebaseStorage = FirebaseStorage.getInstance(),
firebaseInstanceId: FirebaseInstanceId = FirebaseInstanceId.getInstance()
): FirebaseDataSource =
INSTANCE ?: synchronized(this) {
INSTANCE
?: FirebaseDataSource(db, firebaseAuth, firebaseFunctions, firebaseStorage, firebaseInstanceId).also { INSTANCE = it }
}
fun clearInstance() {
INSTANCE = null
}
}
}
, и я использую его в своей деятельности какэтот
private val firebaseDataSource = FirebaseDataSource.getInstance()
может помочь мне исправить утечку памяти или даже улучшить дизайн моего FirebaseDataSource