You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Application实例是否存问题?容器中Retrofit实例重复创建疑问

问题解答

代码示例

MyAppApplication 实现

class MyAppApplication: Application() {

    lateinit var container: AppContainer
    override fun onCreate() {
        super.onCreate()
        container = AppContainer(this)
    }

}

AppContainer 实现

class AppContainer(private val context: Context) {
    private val retrofit = Retrofit.Builder()
    // ...
}

疑问1解答

不会出现多个Application实例。Android系统中,每个应用进程只会创建一个Application实例,它是应用的全局上下文,生命周期和进程绑定。正确获取Application实例的方式是通过Context.getApplicationContext()或强转合法上下文,手动new MyAppApplication()是错误用法,只有这种错误操作才会导致多实例,进而引发全局状态混乱、容器重复初始化、系统上下文异常等问题。

疑问2解答

只要你通过唯一的Application实例获取AppContainer,容器内的Retrofit就只会被创建一次。因为Application的onCreate()仅在进程启动时执行一次,初始化的container是全局唯一的,容器内的retrofit作为成员属性,只会在AppContainer实例化时创建一次。但如果每次使用时都手动new AppContainer(context),就会导致Retrofit多次创建,所以核心是保证AppContainer通过全局唯一的Application实例访问。

入门资料推荐

  • Android官方文档《Application类》章节:重点理解生命周期与全局上下文特性
  • 《Android开发艺术探索》:关于Application与单例模式的设计逻辑内容
  • Kotlin官方文档:类初始化与属性委托相关内容,辅助理解单例实现方式

内容的提问来源于stack exchange,提问作者kora bertrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:02:12