diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index da1139e..f16d1d0 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -16,11 +16,10 @@
 package com.android.customization.model.grid;
 
 import android.content.Context;
-import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
 import com.android.customization.model.CustomizationManager;
@@ -31,12 +30,16 @@
 import com.android.wallpaper.util.PreviewUtils;
 
 import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * {@link CustomizationManager} for interfacing with the launcher to handle {@link GridOption}s.
  */
 public class GridOptionsManager implements CustomizationManager<GridOption> {
 
+    private static final ExecutorService sExecutorService = Executors.newSingleThreadExecutor();
+
     private static GridOptionsManager sGridOptionsManager;
 
     private final LauncherGridOptionsProvider mProvider;
@@ -81,7 +84,18 @@
 
     @Override
     public void fetchOptions(OptionsFetchedListener<GridOption> callback, boolean reload) {
-        new FetchTask(mProvider, callback, reload).execute();
+        sExecutorService.submit(() -> {
+            List<GridOption> gridOptions = mProvider.fetch(reload);
+            new Handler(Looper.getMainLooper()).post(() -> {
+                if (callback != null) {
+                    if (gridOptions != null && !gridOptions.isEmpty()) {
+                        callback.onOptionsLoaded(gridOptions);
+                    } else {
+                        callback.onError(null);
+                    }
+                }
+            });
+        });
     }
 
     /** Call through content provider API to render preview */
@@ -89,41 +103,4 @@
             PreviewUtils.WorkspacePreviewCallback callback) {
         mProvider.renderPreview(gridName, bundle, callback);
     }
-
-    private static class FetchTask extends AsyncTask<Void, Void, List<GridOption>> {
-        private final LauncherGridOptionsProvider mProvider;
-        @Nullable private final OptionsFetchedListener<GridOption> mCallback;
-        private final boolean mReload;
-
-        private FetchTask(@NonNull LauncherGridOptionsProvider provider,
-                @Nullable OptionsFetchedListener<GridOption> callback, boolean reload) {
-            mCallback = callback;
-            mProvider = provider;
-            mReload = reload;
-        }
-
-        @Override
-        protected List<GridOption> doInBackground(Void[] params) {
-            return mProvider.fetch(mReload);
-        }
-
-        @Override
-        protected void onPostExecute(List<GridOption> gridOptions) {
-            if (mCallback != null) {
-                if (gridOptions != null && !gridOptions.isEmpty()) {
-                    mCallback.onOptionsLoaded(gridOptions);
-                } else {
-                    mCallback.onError(null);
-                }
-            }
-        }
-
-        @Override
-        protected void onCancelled() {
-            super.onCancelled();
-            if (mCallback != null) {
-                mCallback.onError(null);
-            }
-        }
-    }
 }
