Skip to content

使用 @Monitor 进行 Koin 内置性能监控

@Monitor 注解(自 Koin Annotations 2.2.0 起可用)通过 Kotzilla 平台(Koin 的官方工具平台)为您的 Koin 组件启用自动性能监控和跟踪。

设置

添加 Kotzilla SDK 依赖项:

kotlin
dependencies {
    implementation "io.kotzilla:kotzilla-core:latest.version"
}

在 Kotzilla 文档上查看最新版本

配置 allOpen 插件以使被监控的类可扩展:

kotlin
plugins {
    id "org.jetbrains.kotlin.plugin.allopen"
}

allOpen {
    annotation("org.koin.core.annotation.Monitor")
}

在您的 Koin 配置中初始化 Kotzilla 分析:

kotlin
import io.kotzilla.sdk.analytics.koin.analytics

fun initKoin() {
    startKoin {
        // Enable Kotzilla monitoring
        analytics()
        modules(appModule)
    }
}

基本用法

只需使用 @Monitor 为您的 Koin 组件添加注解:

kotlin
@Monitor
@Single
class UserService(private val userRepository: UserRepository) {
    fun findUser(id: String): User? = userRepository.findById(id)
    
    suspend fun createUser(userData: UserData): User {
        return userRepository.save(userData)
    }
}

生成的代码

编译器会自动生成一个包装您的组件的代理类:

kotlin
/**
 * Generated by @Monitor - Koin proxy for 'UserService'
 */
class UserServiceProxy(userRepository: UserRepository) : UserService(userRepository) {
    override fun findUser(id: String): User? { 
        return KotzillaCore.getDefaultInstance().trace("UserService.findUser") { 
            super.findUser(id) 
        } 
    }
    
    override suspend fun createUser(userData: UserData): User { 
        return KotzillaCore.getDefaultInstance().suspendTrace("UserService.createUser") { 
            super.createUser(userData) 
        } 
    }
}

Koin 会自动使用代理类代替原始类,透明地捕获:

  • 方法执行时间
  • 调用频率和模式
  • 错误率和类型
  • 性能瓶颈

ViewModel 监控

监控您的 ViewModel 以跟踪 UI 性能:

kotlin
@Monitor
@KoinViewModel
class DetailViewModel(private val repository: Repository) : ViewModel() {
    fun loadData(id: String): StateFlow<Data> = repository.getData(id)
}

Kotzilla 平台集成

监控数据会自动发送到您的 Kotzilla 平台工作区,提供:

  • 实时性能仪表板:查看方法执行时间和趋势
  • 错误跟踪:监控异常率和堆栈跟踪
  • 使用分析:了解哪些组件的使用频率最高
  • 性能警报:获得性能退化的通知

创建您的免费 Kotzilla 帐户并在您的 kotzilla.json 文件中配置 API 密钥:

json
{
  "sdkVersion": "latest.version",
  "keys": [
    {
      "appId": "your-app-id",
      "applicationPackageName": "com.example.app",
      "keyId": "your-key-id", 
      "apiKey": "your-api-key"
    }
  ]
}

要求

  • 使用 @Monitor 注解的类必须是 open 的(由 allOpen 插件自动处理)
  • Kotzilla SDK 依赖项在运行时必须可用
  • 用于数据收集的有效 Kotzilla 平台帐户和 API 密钥

INFO

@Monitor 注解仅跟踪被监控类本身的方法调用。除非也添加了 @Monitor 注解,否则注入到被监控类中的依赖项不会被自动监控。

NOTE

有关完整的设置说明和高级配置选项,请访问 Kotzilla 文档