You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android依赖注入中对象正在重新创建Dagger/Hilt

在使用 Dagger/Hilt 进行 Android 依赖注入时,如果我们在 Dagger 的注入范围内多次调用同一个依赖项,那么该依赖项的实例将会被重新创建,这可能会影响程序的性能和稳定性。

为了解决这个问题,我们可以使用 @Singleton 注解来告诉 Dagger/Hilt,让它创建的依赖项在整个应用程序内都只有一个实例。下面是一个示例:

@Module
@InstallIn(ApplicationComponent::class)
object AppModule {

    @Provides
    @Singleton
    fun provideApi() : Api {
        return Api()
    }
}

class MyActivity : AppCompatActivity() {

    @Inject
    lateinit var api: Api

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        (application as MyApplication).appComponent.inject(this)

        // 使用 api 对象
    }
}

@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {

    fun inject(activity: MyActivity)
}

class MyApplication : Application() {

    val appComponent by lazy {
        DaggerAppComponent.builder()
            .build()
    }
}

在上面的示例中,我们使用 @Singleton 注解将 provideApi() 方法标记为只有一个实例,然后在 AppComponent 中将其添加为依赖项。因为 MyActivity 中注入的 api 依赖项是在 AppComponent 范围内提供的,所以它只会被创建一次。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文

> Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。> > **其实很多开发者已经有意或无意地正在使用这门技术,借着 2023 开年探讨技术趋... 有的时候 Google 会将其翻译成`现代安卓开发`,有的时候又翻译成`新式安卓开发`,个人觉得前者的翻译虽然激进、倒也贴切。下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言...

借助 MAD 助力你的 Android 应用开发|社区征文

MAD 的全称是 Modern Android Development , 它是一系列技术栈和工具链的集合,涵盖了从编程语言到开发框架等各个环节。![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/816cd653f4984adf87697... Dagger/Hilt 的支持,后文会介绍。项目中大量使用了 Hilt 完成依赖注入,进一步提升了代码的编写效率。我们使用 `@Singleton` 提供 Repository 的单例实现,当 Repository 需要 Context 来创建 SharedPreferences 或...

展望 2022 :Android 开发技术动向 | 社区征文

Android Studio- AGP# Android OS## Material YouAndroid12 在10月进行了正式推送。Android12 的最大亮点就是基于 Material You 设计语言对原生系统 UI 进行了重新设计。 Material You 是 Material Design... 多窗口模式下的 App 不能再依赖 `Display.getRealMetrics()` 获取窗口尺寸,当屏幕状态变化导致,OnConfigurationChanged 发生时,使用 WindowManager 的 `WindoeMetrics` 获取准确的窗口尺寸,再根据 `WindowSizeClas...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

Android依赖注入中对象正在重新创建Dagger/Hilt -优选内容

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文
> Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。> > **其实很多开发者已经有意或无意地正在使用这门技术,借着 2023 开年探讨技术趋... 有的时候 Google 会将其翻译成`现代安卓开发`,有的时候又翻译成`新式安卓开发`,个人觉得前者的翻译虽然激进、倒也贴切。下面按照 MAD 的构成要点逐步展开,帮助大家快速了解 MAD 的技术理念。如果大家对其中的语言...
借助 MAD 助力你的 Android 应用开发|社区征文
MAD 的全称是 Modern Android Development , 它是一系列技术栈和工具链的集合,涵盖了从编程语言到开发框架等各个环节。![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/816cd653f4984adf87697... Dagger/Hilt 的支持,后文会介绍。项目中大量使用了 Hilt 完成依赖注入,进一步提升了代码的编写效率。我们使用 `@Singleton` 提供 Repository 的单例实现,当 Repository 需要 Context 来创建 SharedPreferences 或...
展望 2022 :Android 开发技术动向 | 社区征文
Android Studio- AGP# Android OS## Material YouAndroid12 在10月进行了正式推送。Android12 的最大亮点就是基于 Material You 设计语言对原生系统 UI 进行了重新设计。 Material You 是 Material Design... 多窗口模式下的 App 不能再依赖 `Display.getRealMetrics()` 获取窗口尺寸,当屏幕状态变化导致,OnConfigurationChanged 发生时,使用 WindowManager 的 `WindoeMetrics` 获取准确的窗口尺寸,再根据 `WindowSizeClas...

Android依赖注入中对象正在重新创建Dagger/Hilt -相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询