UML Diagram

classDiagram
    class Device {
        +connect(): Boolean
        +stop()
        +isConnected(): Boolean
        +startMonitoring(interval: Long)
        +stopMonitoring()
    }

    class SerialCommunication {
        #context: Context
        -portPath: String
        #serialPort: SerialPort
        #inputStream: InputStream
        #outputStream: OutputStream
        #scope: CoroutineScope
        #isRunning: AtomicBoolean
        -connected: Boolean
        +connect(): Boolean
        +stop()
        +isConnected(): Boolean
        #closeSerialPort()
        #sendCommandAndGetResponse(command: ByteArray): ByteArray
        +startMonitoring(interval: Long)
        +stopMonitoring()
    }

    class HY128Device {
        -TAG: String
        -isMonitoring: AtomicBoolean
        +startMonitoring(interval: Long)
        +stopMonitoring()
        -parseData(response: String): Float
        -hexStringToByteArray(hexString: String): ByteArray
        -bytesToHexString(bytes: ByteArray): String
    }

    class HY130eDevice {
        -TAG: String
        -isMonitoring: AtomicBoolean
        +READ_NOISE_COMMAND: String
        +startMonitoring(interval: Long)
        +stopMonitoring()
        -parseNoiseValue(response: String): Float
        -hexStringToByteArray(hexString: String): ByteArray
        -bytesToHexString(bytes: ByteArray): String
    }

    class MainActivity {
        -device: Device
        -dataCleanupManager: DataCleanupManager
        -selectedDeviceType: String
        +onCreate(savedInstanceState: Bundle)
        -startSerialMonitoring()
        +onDestroy()
        +onRequestPermissionsResult()
    }

     %% 音频处理相关类
    class AudioRecorder {
        -isRecording: AtomicBoolean
        -saveWavFiles: Boolean
        -outputDirectory: File
        +startRecording()
        +stopRecording()
        -processRecording()
        -saveCurrentSlice()
    }

    class AudioFileProcessor {
        -isProcessing: AtomicBoolean
        -fileQueue: ConcurrentLinkedQueue
        +submitFile(file: File)
        -processFiles()
        -processFile(file: File)
    }

    %% 数据管理相关类
    class DataProcessor {
        -dataDirCache: Map
        +saveSecondData(data: NoiseData)
        +saveHourData(data: NoiseData)
        +saveDayData(data: NoiseData)
    }

    class DataCleanupManager {
        -segmentCleanupThread: ScheduledExecutorService
        -sliceCleanupThread: ScheduledExecutorService
        +cleanup()
        -cleanupSegmentData()
        -cleanupSliceData()
    }
    %% 关系定义
    MainActivity --> Device : uses
    MainActivity --> DataCleanupManager : uses
    MainActivity --> DeviceControlScreen : creates
    MainActivity --> AudioTaggingApp : creates
    Device <|.. SerialCommunication
    SerialCommunication <|-- HY128Device
    SerialCommunication <|-- HY130eDevice
    MainActivity --> Device : uses
    AudioRecorder --> AudioFileProcessor : uses
    AudioFileProcessor --> DataProcessor : uses
    DataProcessor --> DataCleanupManager : uses

本文章使用limfx的vscode插件快速发布