Skip to content

About

App to review Android parameters

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

📊 System Monitor — Android

Aplicación Android en Kotlin que monitorea en tiempo real los cuatro principales recursos del sistema: CPU · RAM · Disco · Red

Compatible con Android 5.0 (API 21) hasta Android 14 (API 34) — cubre los últimos 10+ años.


📁 Estructura del Proyecto

SystemMonitor/
├── app/src/main/
│   ├── AndroidManifest.xml
│   ├── java/com/systemmonitor/
│   │   ├── data/
│   │   │   ├── model/
│   │   │   │   └── Models.kt          # SystemSnapshot, CpuStats, MemoryStats, DiskStats, NetworkStats
│   │   │   └── repository/
│   │   │       └── MonitorRepository.kt  # Agrega todos los readers
│   │   ├── service/
│   │   │   ├── MonitorService.kt      # Foreground Service principal
│   │   │   └── BootReceiver.kt        # Reinicia el servicio tras el arranque
│   │   ├── ui/
│   │   │   ├── MainActivity.kt        # ViewPager2 + TabLayout con 5 tabs
│   │   │   ├── MonitorViewModel.kt    # ViewModel compartido (StateFlow)
│   │   │   ├── SettingsActivity.kt    # Pantalla de preferencias
│   │   │   ├── dashboard/DashboardFragment.kt  # Panel con 4 cards + gráfico combinado
│   │   │   ├── cpu/CpuFragment.kt     # Historial línea + barra por núcleo
│   │   │   ├── memory/MemoryFragment.kt  # Pie chart + historial
│   │   │   ├── disk/DiskFragment.kt   # Pie chart interno + externo
│   │   │   └── network/NetworkFragment.kt  # Gráfico dual Rx/Tx + totales
│   │   └── utils/
│   │       ├── CpuReader.kt           # Lee /proc/stat
│   │       ├── ResourceReaders.kt     # MemoryReader, DiskReader, NetworkReader
│   │       └── FormatUtils.kt         # Formateo de bytes, velocidades, %
│   └── res/
│       ├── layout/                    # 6 layouts XML
│       ├── drawable/                  # 8 íconos vectoriales
│       ├── values/                    # colors, strings, themes, arrays
│       ├── xml/preferences.xml
│       └── menu/main_menu.xml
└── build.gradle, settings.gradle, gradle.properties

🔧 APIs Nativas Utilizadas

Recurso API Android Clase/Archivo
CPU /proc/stat (Linux kernel) CpuReader.kt
CPU frecuencia /sys/devices/system/cpu/cpu0/cpufreq/ CpuReader.kt
Memoria RAM ActivityManager.MemoryInfo ResourceReaders.kt
Disco StatFs (interno + externo) ResourceReaders.kt
Red (velocidad) TrafficStats ResourceReaders.kt

⚙️ Foreground Service

MonitorService extiende LifecycleService para:

  • Ejecutarse en primer plano con notificación persistente (silenciosa, prioridad baja)
  • Mostrar CPU / RAM / velocidad de red en la notificación
  • Reiniciarse automáticamente (START_STICKY) si el SO la mata
  • Cancelar automáticamente las coroutines al destruirse (lifecycleScope)
  • Botón "Detener" en la notificación sin abrir la app
Notificación: CPU 23.4% | RAM 61.2% | ↓ 1.2 MB/s

📈 Gráficos (MPAndroidChart v3.1.0)

Fragment Gráfico
Dashboard LineChart — CPU + RAM combinados, últimas 30 muestras
CPU LineChart historial + BarChart uso por núcleo (coloreado por nivel)
Memoria PieChart Usado/Libre + LineChart historial
Disco PieChart Usado/Libre (interno y externo por separado)
Red LineChart dual — velocidad Rx y Tx en tiempo real

🔋 Optimización de Batería

Técnica Implementación
Intervalo configurable 1s / 2s / 5s / 10s / 30s / 60s (defecto 2s)
Sin WakeLock El SO gestiona el scheduling; la prioridad foreground mantiene el servicio
Sin alarmas repetitivas Coroutine delay() en lugar de AlarmManager
Notificación silenciosa IMPORTANCE_LOW, setSilent(true), PRIORITY_LOW
LifecycleService Las coroutines se cancelan automáticamente al destruir el servicio
offscreenPageLimit Evita recrear fragments al cambiar de tab

🚀 Cómo Compilar y Ejecutar

Requisitos

  • Android Studio Hedgehog 2023.1+ (o superior)
  • JDK 11+
  • Android SDK API 21–34

Pasos

  1. Clonar / descomprimir el proyecto
  2. Abrir Android Studio → Open → carpeta SystemMonitor/
  3. Esperar sincronización de Gradle (descarga dependencias ~100 MB primera vez)
  4. Conectar dispositivo con Depuración USB activada o lanzar emulador
  5. Pulsar ▶ Run (Shift+F10)

Primera ejecución

  • Android 13+: se pedirá permiso de notificaciones → Permitir
  • El servicio de monitoreo arranca automáticamente
  • Para detenerlo: menú ⋮ → "Iniciar/Detener"

🛠️ Configuración (Settings)

Opción Descripción
Intervalo de muestreo Frecuencia de actualización de datos
Iniciar al arrancar Reinicia el monitoreo tras reiniciar el dispositivo

📋 Permisos Necesarios

Permiso Propósito
FOREGROUND_SERVICE Requerido para ejecutar el servicio en primer plano
RECEIVE_BOOT_COMPLETED Reiniciar tras arranque del dispositivo
POST_NOTIFICATIONS Mostrar notificación persistente (Android 13+)
ACCESS_NETWORK_STATE Estado de la conexión de red
READ_PHONE_STATE TrafficStats en algunos dispositivos

📱 Compatibilidad

Android API Soporte
5.0 Lollipop 21 ✅ mínimo
6.0 Marshmallow 23 ✅
7.0 Nougat 24 ✅
8.0 Oreo 26 ✅ startForegroundService()
9.0 Pie 28 ✅
10 Q 29 ✅
11 R 30 ✅
12 S 31 ✅ PendingIntent FLAG_IMMUTABLE
13 Tiramisu 33 ✅ POST_NOTIFICATIONS
14 34 ✅ foregroundServiceType dataSync

🏗️ Dependencias Principales

androidx.lifecycle:lifecycle-service:2.6.2      // LifecycleService
com.github.PhilJay:MPAndroidChart:v3.1.0        // Gráficos
androidx.work:work-runtime-ktx:2.8.1            // WorkManager (backup)
kotlinx-coroutines-android:1.7.3                // Coroutines
androidx.navigation:navigation-fragment-ktx:2.7.4

📐 Arquitectura

UI Layer        ┌─ DashboardFragment ─┐
(Fragments)     ├─ CpuFragment        ├──► MonitorViewModel (StateFlow)
                ├─ MemoryFragment     │         │
                ├─ DiskFragment       │         │ bind
                └─ NetworkFragment ───┘         ▼
                                         MonitorService (FG)
Domain/Data                                     │
Layer                                    MonitorRepository
                                        /    |    |    \
                                  CpuReader Mem Disk Network
                                  /proc/stat AM StatFs TrafficStats

✅ Buenas Prácticas Aplicadas

  • MVVM con ViewModel + StateFlow + collect en repeatOnLifecycle
  • ViewBinding — sin findViewById en ningún Fragment
  • Coroutines con Dispatchers.IO para lectura de archivos del sistema
  • LifecycleService — cancelación automática de coroutines
  • START_STICKY — el servicio se reinicia si el OS lo mata
  • Notificación silenciosa — no interrumpe al usuario
  • min/targetSdk correctos — retrocompatibilidad hasta API 21
  • ProGuard configurado para release builds

About

App to review Android parameters

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages