在Android Koin中,@Inject和@ViewModel注释都是用于依赖注入的。它们的主要区别在于它们被注释的类的生命周期和初始化方式。
@Inject注释应该用于需要短暂使用的类,例如Activity或Fragment。它们在需要时创建并初始化,以及在不再需要时立即销毁,因此不需要它们的生命周期为长期存活。示例代码如下:
// Koin模块示例 val myModule = module { single { MyRepository() } factory { MyViewModel(get()) } }
// Activity示例 class MyActivity : AppCompatActivity() { private val myViewModel : MyViewModel by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
// 使用myViewModel进行操作
}
}
@ViewModel注释则需要用于需要长期存活的类,例如ViewModel或Presenter。ViewModel由Android架构组件支持,并且通常在Activity中使用。这里是一个简单的例子:
// Koin注释示例 val myModule = module { factory { MyRepository() } viewModel { MyViewModel(get()) } }
// ViewModel示例 class MyViewModel(private val repository: MyRepository) : ViewModel() { // 使用repository做一些操作 }
// Activity示例 class MyActivity : AppCompatActivity() { private val myViewModel : MyViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
// 使用myViewModel进行操作
}
}
总之,@Inject和@ViewModel注释都是非常实用的,但应根据所处的类的生命周期来选择使用哪个。
下一篇:Android空白间隙动画