Skip to content

Android 模块加载

本指南涵盖了使用 androidContext()androidLogger() 的 Android 特定模块加载。

INFO

有关核心模块概念(声明、包含、重写),请参阅 Modules。有关延迟模块加载,请参阅 Lazy Modules

在 Android 上启动 Koin

使用注解

kotlin
@KoinApplication
class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        startKoin<MainApplication> {
            androidLogger()
            androidContext(this@MainApplication)
        }
    }
}

使用 DSL

kotlin
class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        startKoin {
            // Android 日志记录器
            androidLogger()
            // 或带有级别
            androidLogger(Level.DEBUG)

            // Android 上下文
            androidContext(this@MainApplication)

            // 模块
            modules(appModule, networkModule, dataModule)
        }
    }
}

Android 特定函数

函数描述
androidContext()在定义中提供 Application 上下文
androidApplication()在定义中提供 Application 实例
androidLogger()适用于 Koin 的 Android Logcat 日志记录器

使用 Android 上下文

kotlin
val androidModule = module {
    single { DatabaseHelper(androidContext()) }
    single { SharedPrefsManager(androidContext()) }
    single { NotificationHelper(androidApplication()) }
}

动态模块加载

根据 Activity 生命周期在运行时加载或卸载模块:

kotlin
class FeatureActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        // 加载功能特定的依赖项
        loadKoinModules(featureModule)
        super.onCreate(savedInstanceState)
    }

    override fun onDestroy() {
        super.onDestroy()
        // 离开功能时进行清理
        unloadKoinModules(featureModule)
    }
}

用例

  • 高级功能 - 仅在用户拥有订阅时加载
  • 调试工具 - 仅在调试构建中加载
  • 可选功能 - 按需加载
kotlin
// 高级功能模块
val premiumModule = module {
    viewModel<PremiumViewModel>()
    single<PremiumRepository>()
}

class PremiumActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        if (userHasPremium()) {
            loadKoinModules(premiumModule)
        }
        super.onCreate(savedInstanceState)
    }
}

在 Android 上延迟加载

对于后台模块加载,请使用延迟模块:

kotlin
class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidLogger()
            androidContext(this@MainApplication)

            // 关键模块立即加载
            modules(coreModule)

            // 非关键模块在后台加载
            lazyModules(analyticsModule, syncModule)
        }
    }
}

INFO

有关包含并行加载在内的完整延迟模块文档,请参阅 Lazy Modules

下一步