diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9dd32c2..71648e8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -486,9 +486,7 @@
             </intent-filter>
         </receiver>
         <service
-            android:name=".service.EmailBroadcastProcessorService"
-            android:permission="android.permission.BIND_JOB_SERVICE"
-            android:exported="true" />
+            android:name=".service.EmailBroadcastProcessorService" />
 
         <!-- Support for DeviceAdmin / DevicePolicyManager.  See SecurityPolicy class for impl. -->
         <receiver
@@ -727,7 +725,6 @@
         </service>
 
         <service android:name="com.android.email.EmailIntentService"
-                 android:permission="android.permission.BIND_JOB_SERVICE"
                  android:exported="false">
             <intent-filter>
                 <action android:name="com.android.mail.action.RESEND_NOTIFICATIONS" />
diff --git a/provider_src/com/android/email/EmailIntentService.java b/provider_src/com/android/email/EmailIntentService.java
index 5924c90..0c6d761 100644
--- a/provider_src/com/android/email/EmailIntentService.java
+++ b/provider_src/com/android/email/EmailIntentService.java
@@ -29,12 +29,12 @@
     private static final String LOG_TAG = LogTag.getLogTag();
 
     public EmailIntentService() {
-        super();
+        super("EmailIntentService");
     }
 
     @Override
-    protected void onHandleWork(final Intent intent) {
-        super.onHandleWork(intent);
+    protected void onHandleIntent(final Intent intent) {
+        super.onHandleIntent(intent);
 
         if (UIProvider.ACTION_UPDATE_NOTIFICATION.equals(intent.getAction())) {
             final NotificationController nc =
diff --git a/provider_src/com/android/email/service/EmailBroadcastProcessorService.java b/provider_src/com/android/email/service/EmailBroadcastProcessorService.java
index 5d264f0..7aa5467 100644
--- a/provider_src/com/android/email/service/EmailBroadcastProcessorService.java
+++ b/provider_src/com/android/email/service/EmailBroadcastProcessorService.java
@@ -17,6 +17,7 @@
 package com.android.email.service;
 
 import android.accounts.AccountManager;
+import android.app.IntentService;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentUris;
@@ -33,8 +34,6 @@
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 
-import androidx.core.app.JobIntentService;
-
 import com.android.email.EmailIntentService;
 import com.android.email.Preferences;
 import com.android.email.R;
@@ -70,9 +69,7 @@
  * This also handles the DeviceAdminReceiver in SecurityPolicy, because it is also
  * a BroadcastReceiver and requires the same processing semantics.
  */
-public class EmailBroadcastProcessorService extends JobIntentService {
-    public static final int JOB_ID = 200;
-
+public class EmailBroadcastProcessorService extends IntentService {
     // Action used for BroadcastReceiver entry point
     private static final String ACTION_BROADCAST = "broadcast_receiver";
 
@@ -84,11 +81,11 @@
     private static final String ACTION_UPGRADE_BROADCAST = "upgrade_broadcast_receiver";
 
     public EmailBroadcastProcessorService() {
-        super();
-    }
+        // Class name will be the thread name.
+        super(EmailBroadcastProcessorService.class.getName());
 
-    public static void enqueueWork(Context context, Intent work) {
-        enqueueWork(context, EmailBroadcastProcessorService.class, JOB_ID, work);
+        // Intent should be redelivered if the process gets killed before completing the job.
+        setIntentRedelivery(true);
     }
 
     /**
@@ -98,13 +95,13 @@
         Intent i = new Intent(context, EmailBroadcastProcessorService.class);
         i.setAction(ACTION_BROADCAST);
         i.putExtra(Intent.EXTRA_INTENT, broadcastIntent);
-        EmailBroadcastProcessorService.enqueueWork(context, i);
+        context.startService(i);
     }
 
     public static void processUpgradeBroadcastIntent(final Context context) {
         final Intent i = new Intent(context, EmailBroadcastProcessorService.class);
         i.setAction(ACTION_UPGRADE_BROADCAST);
-        EmailBroadcastProcessorService.enqueueWork(context, i);
+        context.startService(i);
     }
 
     /**
@@ -116,11 +113,11 @@
         Intent i = new Intent(context, EmailBroadcastProcessorService.class);
         i.setAction(ACTION_DEVICE_POLICY_ADMIN);
         i.putExtra(EXTRA_DEVICE_POLICY_ADMIN, message);
-        EmailBroadcastProcessorService.enqueueWork(context, i);
+        context.startService(i);
     }
 
     @Override
-    protected void onHandleWork(Intent intent) {
+    protected void onHandleIntent(Intent intent) {
         // This method is called on a worker thread.
 
         // Dispatch from entry point
