If you are developing an Android application using Kotlin, you might face a frustrating issue where your background task is not running on Samsung devices. This problem is very common due to Samsung’s aggressive battery optimization policies. Many developers report that background services, alarms, or scheduled jobs do not work as expected when running on devices like Samsung Galaxy series.
In this article, we will dive deep into why this issue occurs, the differences between background execution in Android versions, and provide complete Kotlin code examples to ensure your tasks can run reliably on Samsung devices.

Why Background Tasks Fail on Samsung Devices
Samsung devices apply custom modifications on top of the standard Android system. This includes:
- Battery Optimization: Samsung forces apps into deep sleep modes, killing services aggressively.
- Doze Mode: Introduced in Android Marshmallow, but heavily enforced on Samsung devices.
- App Standby Buckets: In Android Pie and above, background execution limits are stricter.
As a result, if you are using Service
, AlarmManager
, or even WorkManager
without proper configuration, your background task may not run at all on Samsung devices.
Using WorkManager for Reliable Background Tasks
The recommended solution by Google is to use WorkManager, as it handles constraints like battery optimization and device restarts. Below is a simple Kotlin example.
// Step 1: Create a Worker class class SyncWorker(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) { override fun doWork(): Result { // Your background task code Log.d("SyncWorker", "Running background task on Samsung device") return Result.success() } } // Step 2: Enqueue the worker val workRequest = PeriodicWorkRequestBuilder( 15, TimeUnit.MINUTES ).build() WorkManager.getInstance(context).enqueueUniquePeriodicWork( "SyncWork", ExistingPeriodicWorkPolicy.KEEP, workRequest )
This code will schedule a task every 15 minutes. However, on Samsung devices, you might still need to request the user to exclude the app from battery optimization.
Requesting Battery Optimization Whitelist
To improve reliability, ask the user to allow your app to ignore battery optimizations. Use the following Kotlin code:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val packageName = context.packageName val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager if (!pm.isIgnoringBatteryOptimizations(packageName)) { val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) intent.data = Uri.parse("package:$packageName") context.startActivity(intent) } }
This will show a system dialog asking users to whitelist your app. Without this, even WorkManager jobs may be delayed or blocked by Samsung’s system.
Alternative Approaches
Depending on your use case, you can also try:
- Foreground Service: If your task is critical (e.g., location tracking or music playback).
- AlarmManager with setExactAndAllowWhileIdle(): For time-sensitive alarms.
- Push Notifications via Firebase: Offload background work to a server instead of client device.
// Example: AlarmManager with Doze mode support val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(context, MyAlarmReceiver::class.java) val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60000, // 1 minute later pendingIntent ) }
Real-World Example: Syncing Data Every 15 Minutes
Imagine you are building a note-taking app that needs to sync notes with the server every 15 minutes, even when the app is not open. Using WorkManager
combined with battery optimization whitelisting ensures that your sync runs reliably across all devices, including Samsung phones.
Comparison Table
Approach | Pros | Cons | Best Use Case |
---|---|---|---|
Service | Simple implementation | Killed easily on Samsung | Short tasks when app is foreground |
AlarmManager | Precise scheduling | Blocked in Doze mode without extra code | Time-specific alarms |
WorkManager | Handles constraints, survives restarts | May still be delayed on Samsung | Periodic background syncs |
Foreground Service | Highly reliable | Notification always visible | Music apps, location tracking |
Best Practices for Samsung Devices
- Use WorkManager whenever possible.
- Ask users to disable battery optimization for your app.
- Consider foreground services for critical tasks.
- Keep background tasks lightweight to avoid being killed.
- Always test on real Samsung devices.
Conclusion
Background task execution on Samsung devices can be challenging due to aggressive battery optimizations. By leveraging WorkManager
, AlarmManager
, and requesting battery optimization whitelisting, developers can ensure their Kotlin background tasks run reliably across all Android devices. Testing on real Samsung hardware remains crucial, as emulator behavior may differ from actual devices.
For further details, check the official documentation: Google WorkManager Documentation.