将上下文作为存储库中的主要构造函数参数是好是坏
Having context as primary constructor parameter inside a repository is good or bad
我有一个名为 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,这是最佳做法还是不好?
这既不是最佳做法也不是坏事。有时需要上下文,尤其是当您需要它来访问数据库、共享首选项或获取某些资源时。
如果您需要将上下文存在于您的存储库中,则需要确保您使用的是应用程序上下文。如果您正在使用 activity 的上下文,那么当活动消失但存储库没有消失时,您将泄漏您的活动。
两者 Activity and Application 上下文在他们提供的内容上非常相似。区别在于 Activity 上下文与 activity 的生命周期相关联,而应用程序上下文与应用程序生命周期相关联。
现在,由于应用程序的生命周期与您的存储库一样长,因此可以在您的存储库中使用应用程序上下文。
我有一个名为 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,这是最佳做法还是不好?
这既不是最佳做法也不是坏事。有时需要上下文,尤其是当您需要它来访问数据库、共享首选项或获取某些资源时。
如果您需要将上下文存在于您的存储库中,则需要确保您使用的是应用程序上下文。如果您正在使用 activity 的上下文,那么当活动消失但存储库没有消失时,您将泄漏您的活动。
两者 Activity and Application 上下文在他们提供的内容上非常相似。区别在于 Activity 上下文与 activity 的生命周期相关联,而应用程序上下文与应用程序生命周期相关联。
现在,由于应用程序的生命周期与您的存储库一样长,因此可以在您的存储库中使用应用程序上下文。