关于android开发框架了解 android开发三大框架

关于android开发框架了解,android开发三大框架 。小编来告诉你更多相关信息 。
android开发三大框架为关注的网友们详解android开发三大框架和关于android开发框架了解的话题,下面为详细的介绍 。
Dagger 和 Koin 无疑是 Android 中最流行的两个依赖注入框架 。这两个库具有相同的用途,而且看起来非常相似,但它们在底层的工作方式却非常不同 。
那么Hilt是什么呢?Hilt是一个内部使用Dagger的库,只是简化了它的用法,因此我在这里所说的有关Dagger的内容也适用于 Hilt 。在本文中,我不会告诉您应该选择哪个库 。相反,我想向您展示它们的本质区别以及这些差异对您的应用造成的影响 。
Dagger如果我们希望 Dagger 提供某个类的实例,我们要做的就是在构造函数中添加@Inject注解 。

关于android开发框架了解 android开发三大框架

文章插图
添加这个注解后,Dagger会在构建时为这个类生成一个Factory 。在该用例下,由于它的类名是CompositeAdapter, 它会生成一个名为CompositeAdapter**_**Factory的类 。
此类包含创建CompositeAdapter类的实例所需的所有信息 。
关于android开发框架了解 android开发三大框架

文章插图
如你所看到该工厂类实现了get()并返回了一个新的CompositeAdapter实例 。这实际上是此类实现的Provider 接口中指定的方法 。其他类可以使用Provider接口来获取一个类的实例 。
关于android开发框架了解 android开发三大框架

文章插图
如果我们用 Hilt 代替 Dagger 呢?在这个例子中,没有任何区别 。Hilt是一个内部使用Dagger的库,我向你展示的类是由Dagger生成的 。如果您使用Hilt,它确实为我们生成了一些额外的类,这些类简化了Dagger的使用,并减少了我们需要编写的样板代码的数量 。但核心部分保持不变 。
关于android开发框架了解,android开发三大框架 。小编来告诉你更多相关信息 。
android开发三大框架
关于android开发框架了解 android开发三大框架

文章插图
KoinKoin与Dagger以及Hilt相比,管理依赖项的方法完全不同 。要在 Koin 中注册依赖项,我们不会使用任何注解,因为Koin不会生成任何代码 。相反,我们必须为模块提供工厂,这些模块将用于创建项目中所需的每个类的实例 。
Koin将这些工厂类的引用添加到InstancesRegistry类中,该类包含对我们编写的所有工厂的引用 。
关于android开发框架了解 android开发三大框架

文章插图
该map中的key是类的全名或使用命名参数时提供的名称 。对应的值是我们编写的工厂,将用于创建类的实例 。
要获得依赖关系,我们需要调用get()(比如在一个工厂类中) 或者通过在activities或fragments中调用inject()委托属性 ,从而懒加载get() 。get()方法将查找为给定类型的类注册工厂,并将其注入其中 。
关于android开发框架了解 android开发三大框架

文章插图
有什么影响?Dagger 生成代码来提供依赖,而 Koin 不生成代码,这实际上带来了一些影响 。
1. 错误处理
因为Dagger是一个编译时依赖注入框架,如果我们忘记提供某些依赖,我们几乎会立即知道我们的错误,因为我们的项目将构建失败 。
例如,如果我们忘记向构造函数的CompositeAdapter中添加@Inject注解,并尝试将其注入 fragment 中,则构建将失败,并显示适当的错误,确切地告诉我们出了什么问题 。
关于android开发框架了解,android开发三大框架 。小编来告诉你更多相关信息 。
android开发三大框架
关于android开发框架了解 android开发三大框架

文章插图
在 Koin 中的情况有所不同,因为它不会生成任何代码 。如果我们忘记为CompositeAdapter类添加工厂,应用将会成功构建,但是会抛出RuntimeException一旦我们请求获取这个类的实例 。它可能会在应用启动时发生,因此我们可能会立即注意到它,但也可能稍后在其他屏幕上或当用户执行某些特定操作时发生 。
关于android开发框架了解 android开发三大框架

文章插图
2. 对构建时间的影响
Koin 不生成任何代码的优点是:它对我们的构建时间的影响要小得多 。Dagger需要使用注解处理器来扫描代码并生成适当的类 。这可能需要一些时间,可能会减慢我们的构建 。
3. 对运行时性能的影响
从另一方面来说,因为 Koin 在运行时解析依赖项,所以它的运行时性能稍差一些 。