Tar*_*nga 13 android kotlin dagger-hilt
我正在使用 Hilt 将上下文和其他依赖项注入到我的 HomeViewModel 类中;一切正常,但我收到此警告。我怎样才能防止泄漏?
这是我的 HomeFragment(我在其中注入并使用 HomeViewModel 类):
@AndroidEntryPoint
class HomeFragment : Fragment() {
private val viewModel: HomeViewModel by viewModels()
....
}
Run Code Online (Sandbox Code Playgroud)
这是警告:
class HomeViewModel @ViewModelInject constructor(
@ApplicationContext val context: Context,
private val locationAPI: LocationAPI,
private val imagesAPI: ImagesAPI
) :
ViewModel() {
...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用:
//Hilt DI
implementation "com.google.dagger:hilt-android:2.30.1-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.30.1-alpha"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02"
kapt "androidx.hilt:hilt-compiler:1.0.0-alpha02"
Run Code Online (Sandbox Code Playgroud)
谢谢!
- 根据建议,在第一个给出的答案之后进行编辑:
家庭片段现在是:
@HiltViewModel
class DetailsViewModel @Inject constructor(
@ApplicationContext val context: Context,
private val locationDetailsAPI: LocationAPI) :
ViewModel() {
...
}
Run Code Online (Sandbox Code Playgroud)
依赖更新为:
//Hilt DI
implementation "com.google.dagger:hilt-android:2.31-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.30.1-alpha"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0-alpha03"
Run Code Online (Sandbox Code Playgroud)
而且我仍然收到此泄漏错误。
有什么想法吗?
Mos*_*ter 22
在我面对这个警告之后
我决定分析内存以确保该方法会导致内存泄漏,但我发现非常有趣
是的,没有泄漏,这只是一个警告,所以不要再关心它了,快乐编码;)
改为注入应用程序:
@Inject constructor(private val application: Application)
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样获取应用程序上下文:
application.applicationContext
Run Code Online (Sandbox Code Playgroud)
我没有收到此警告,并且我以相同的方式注入上下文。
尝试将 hilt 更新到 2.31.2-alpha,将 hilt-androidx 更新到 1.0.0-alpha03
有一些重大变化。您需要使用@HiltViewModel注释您的视图模型,使用@Inject而不是@ViewModelInject。您需要将所有对 ApplicationComponent 的引用替换为 SingletonComponent。
小智 5
我认为这是某种错误的警告,因为 Android studio 无法推断出您正在注入应用程序级别上下文。
请参阅警告消息详细信息:
ViewModel 类永远不应该指向视图或非应用 程序上下文。
现在尝试将构造函数参数名称从 更改为context
,applicationContext
警告消失了。
class HomeViewModel @ViewModelInject constructor(
@ApplicationContext val applicationContext: Context,
private val locationAPI: LocationAPI,
private val imagesAPI: ImagesAPI
) :
ViewModel() {
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3189 次 |
最近记录: |