How do you handle background processing in Android, and what are the trade-offs between WorkManager, Coroutines, and Services?