📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.
v1.0 — Android Jetpack WorkManager, Kotlin Coroutines, CoroutineWorker, Restrições de Hardware e Tarefas Assíncronas Persistentes
Série Prática Android Clássico — Projeto 15 de 21
- P14: Portais Dimensionais com Notificações Push
- ➡️ P15 (este): J.A.R.V.I.S. Sync com WorkManager
- P16: Alerta Gotham com Broadcast & Alarmes
- P17: Anime Soundboard com MediaPlayer
- P18: Radar de Habilidades com Canvas 2D
O projeto J.A.R.V.I.S. Sync implementa o padrão oficial do Google para processamento assíncrono garantido e persistente em segundo plano: o Jetpack WorkManager. A aplicação orquestra rotinas pesadas de telemetria e diagnóstico da armadura do Homem de Ferro, agendando execuções subordinadas a Restrições de Hardware (Constraints): execução exclusiva quando o dispositivo estiver conectado à tomada (carregando) e com conexão de rede Wi-Fi não-tarifada ativa, sobrevivendo a reinicializações completas do sistema operacional.
Os trabalhadores assíncronos, repositórios de diagnóstico e telas estão contidos na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p15_jarvis_workmanager/
├── assets/
│ ├── mockup_jarvis_fluxo.svg
│ ├── screenshot_01_jarvis_ocioso.svg
│ ├── screenshot_02_jarvis_executando.svg
│ └── screenshot_03_jarvis_concluido.svg
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/jarvissync/
│ │ │ │ ├── worker/
│ │ │ │ │ └── JarvisDiagnosticsWorker.kt
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ └── build.gradle
│ ├── gradle/
│ ├── build.gradle
│ ├── gradlew
│ ├── settings.gradle
│ └── README.md
└── index.md
| ID | Persona | Narrativa da Funcionalidade | Critério de Aceitação Principal | Prioridade |
|---|---|---|---|---|
| US-01 | Tony Stark / Piloto | Quero disparar uma rotina de sincronização de telemetria sem travar a interface da armadura. | Agendamento assíncrono via WorkManager em milissegundos. | Alta |
| US-02 | Tony Stark / Piloto | Quero que a sincronização só aconteça quando o reator Arc estiver recarregando (plugado na energia). | Aplicação de constraint setRequiresCharging(true). |
Alta |
| US-03 | Tony Stark / Piloto | Quero acompanhar o progresso percentual da sincronização na tela em tempo real. | Monitoramento reativo via getWorkInfoByIdLiveData() ou StateFlow. |
Alta |
| US-04 | Engenheiro de Sistemas | Quero que a rotina tente novamente caso a conexão caia no meio do upload. | Configuração de BackoffCriteria exponencial automático. |
Média |
| US-05 | Desenvolvedor Mobile | Quero poder cancelar trabalhos agendados pelo ID ou tag a qualquer instante. | Invocação de WorkManager.cancelWorkById(). |
Baixa |
CoroutineWorker.Constraints.Builder() com NetworkType.UNMETERED e setRequiresCharging(true).OneTimeWorkRequestBuilder com tags semânticas.setProgress(workDataOf(...)).Result.success()) ou falha recuperável (Result.retry()).Dispatchers.Default sem bloquear a UI.flowchart TD
Pilot([fa:fa-user Tony Stark])
WM[(fa:fa-gears WorkManager Engine)]
Power[(fa:fa-plug Sensor de Energia/Rede)]
subgraph AppJarvis ["🤖 J.A.R.V.I.S. Sync (mobile-android-kotlin)"]
UC01["Agendar Sincronização"]
UC02["Verificar Restrições de Bateria/Wi-Fi"]
UC03["Executar CoroutineWorker em Background"]
UC04["Emitir Progresso Percentual"]
UC05["Finalizar Diagnóstico com Sucesso"]
end
Pilot --> UC01
UC01 --> WM
WM --> UC02
Power --> UC02
UC02 -->|Condições Atendidas| UC03
UC03 --> UC04
UC04 --> Pilot
UC03 --> UC05
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-01 | mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt |
testWorkerInheritsCoroutineWorker() |
| RF-02 | US-02 | mobile-android-kotlin/app/.../MainActivity.kt |
testConstraintsChargingAndUnmetered() |
| RF-03 | US-01 | mobile-android-kotlin/app/.../MainActivity.kt |
testWorkRequestEnqueued() |
| RF-04 | US-03 | mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt |
testProgressEmittedLiveData() |
| RF-05 | US-04 | mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt |
testWorkerReturnsSuccessResult() |
JarvisDiagnosticsWorker.kt)ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em
mobile-android-kotlin.
cd catalogo_projetos/android_p15_jarvis_workmanager/mobile-android-kotlin
./gradlew test
./gradlew assembleDebug
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Configuração do WorkManager | Biblioteca importada e Worker instanciável | PASS ✅ |
| CP-02 | Definição de Constraints | Regras de energia e conectividade validadas | PASS ✅ |
| CP-03 | Emissão de Progresso | Atualização em tempo real da barra de progresso no app | PASS ✅ |
| CP-04 | Persistência de Tarefa | Trabalho retido após fechamento da Activity | PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes com WorkManagerTestInitHelper aprovados com 100% de sucesso |
PASS ✅ |