Android 将上下文作为存储库中的主构造函数参数是好是坏

Android 将上下文作为存储库中的主构造函数参数是好是坏,android,android-studio,kotlin,android-mvvm,Android,Android Studio,Kotlin,Android Mvvm,我有一个名为LocationRepository的存储库LocationRepository的代码是 class LocationRepository( private val context: Context private val api: AppApi, private val db:AppDatabase ) : SafeApiRequest() { } 在这里,你可以看到我正在通过主构造函数传递一个上下文,我需要将位图从其Uri转换为bas

我有一个名为
LocationRepository
的存储库
LocationRepository
的代码是

class LocationRepository(
       private val context: Context
       private val api: AppApi, 
       private val db:AppDatabase
) : SafeApiRequest() {
}
在这里,你可以看到我正在通过主构造函数传递一个上下文,我需要将位图从其
Uri
转换为base64,你可以看到下面的暂停乐趣

suspend fun submitLocation(location: Location,employee: Employee) : LocationUpdateResponse{
}

您可以在这里看到,我正在传递包含图像的
Uri
的位置。在调用API之前,我必须将
Uri
转换为base64,这是最佳做法还是错误?

这既不是最佳做法,也不是错误做法。有时,有上下文是必要的,特别是当您需要它来访问数据库、共享首选项或获取一些资源时

如果需要在存储库中使用上下文,则需要确保使用的是应用程序上下文。如果您使用的是活动的上下文,那么当活动消失但存储库不存在时,您会泄漏活动

和上下文都非常类似于它们所提供的内容。不同之处在于,活动上下文与活动的生命周期相关联,而应用程序上下文与应用程序生命周期相关联


现在,由于应用程序的寿命与存储库的寿命一样长,因此可以在存储库中使用应用程序上下文。

是的,我将使用应用程序上下文,我想要应用程序生命周期