diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index 6d3649d..5a04143 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -37,12 +37,11 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.utils.AsyncLoaderCompat;
+import com.android.settingslib.utils.ThreadUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -56,7 +55,6 @@
     private static final String TAG = "ContextualCardLoader";
     private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;
 
-    private final ExecutorService mExecutorService;
     private final ContentObserver mObserver = new ContentObserver(
             new Handler(Looper.getMainLooper())) {
         @Override
@@ -76,7 +74,6 @@
     ContextualCardLoader(Context context) {
         super(context);
         mContext = context.getApplicationContext();
-        mExecutorService = Executors.newCachedThreadPool();
     }
 
     @Override
@@ -163,8 +160,8 @@
         final List<Future<ContextualCard>> eligibleCards = new ArrayList<>();
 
         for (ContextualCard card : candidates) {
-            final EligibleCardChecker future = new EligibleCardChecker(mContext, card);
-            eligibleCards.add(mExecutorService.submit(future));
+            final EligibleCardChecker checker = new EligibleCardChecker(mContext, card);
+            eligibleCards.add(ThreadUtils.postOnBackgroundThread(checker));
         }
         // Collect future and eligible cards
         for (Future<ContextualCard> cardFuture : eligibleCards) {
diff --git a/src/com/android/settings/homepage/contextualcards/conditional/ConditionManager.java b/src/com/android/settings/homepage/contextualcards/conditional/ConditionManager.java
index 66f6c81..1beac9b 100644
--- a/src/com/android/settings/homepage/contextualcards/conditional/ConditionManager.java
+++ b/src/com/android/settings/homepage/contextualcards/conditional/ConditionManager.java
@@ -23,13 +23,12 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.homepage.contextualcards.ContextualCard;
+import com.android.settingslib.utils.ThreadUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -42,7 +41,6 @@
 
     private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20;
 
-    private final ExecutorService mExecutorService;
     private final Context mAppContext;
     private final ConditionListener mListener;
 
@@ -50,7 +48,6 @@
 
     public ConditionManager(Context context, ConditionListener listener) {
         mAppContext = context.getApplicationContext();
-        mExecutorService = Executors.newCachedThreadPool();
         mCardControllers = new ArrayList<>();
         mListener = listener;
         initCandidates();
@@ -64,8 +61,8 @@
         final List<Future<ContextualCard>> displayableCards = new ArrayList<>();
         // Check displayable future
         for (ConditionalCardController card : mCardControllers) {
-            final DisplayableChecker future = new DisplayableChecker(getController(card.getId()));
-            displayableCards.add(mExecutorService.submit(future));
+            final DisplayableChecker checker = new DisplayableChecker(getController(card.getId()));
+            displayableCards.add(ThreadUtils.postOnBackgroundThread(checker));
         }
         // Collect future and add displayable cards
         for (Future<ContextualCard> cardFuture : displayableCards) {
diff --git a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
index ff76779..bdf97a8 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/NotificationChannelSlice.java
@@ -20,8 +20,6 @@
 import static android.app.NotificationManager.IMPORTANCE_NONE;
 import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
 
-import static com.android.settings.notification.ChannelListPreferenceController.ARG_FROM_SETTINGS;
-
 import android.app.Application;
 import android.app.NotificationChannel;
 import android.app.NotificationChannelGroup;
@@ -62,13 +60,12 @@
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.utils.ThreadUtils;
 
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -135,7 +132,6 @@
             };
 
     protected final Context mContext;
-    private final ExecutorService mExecutorService;
     @VisibleForTesting
     NotificationBackend mNotificationBackend;
     private NotificationBackend.AppRow mAppRow;
@@ -145,7 +141,6 @@
     public NotificationChannelSlice(Context context) {
         mContext = context;
         mNotificationBackend = new NotificationBackend();
-        mExecutorService = Executors.newCachedThreadPool();
     }
 
     @Override
@@ -376,9 +371,9 @@
         // Create tasks to get notification data for multi-channel packages.
         final List<Future<NotificationBackend.AppRow>> appRowTasks = new ArrayList<>();
         for (PackageInfo packageInfo : packageInfoList) {
-            final NotificationMultiChannelAppRow future = new NotificationMultiChannelAppRow(
+            final NotificationMultiChannelAppRow appRow = new NotificationMultiChannelAppRow(
                     mContext, mNotificationBackend, packageInfo);
-            appRowTasks.add(mExecutorService.submit(future));
+            appRowTasks.add(ThreadUtils.postOnBackgroundThread(appRow));
         }
 
         // Get the package which has sent at least ~10 notifications and not turn off channels.
