diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index 6a9afdb..eca83e5 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -251,6 +251,8 @@
         // A Queue of pending requests to execute on the overlay.
         private final ArrayDeque<Consumer<IDreamOverlay>> mRequests;
 
+        private Handler mHandler = new Handler(Looper.getMainLooper());
+
         private boolean mBound;
 
         OverlayConnection() {
@@ -259,34 +261,40 @@
 
         public void bind(Context context, @Nullable ComponentName overlayService,
                 ComponentName dreamService) {
-            if (overlayService == null) {
-                return;
-            }
+            mHandler.post(() -> {
+                if (overlayService == null) {
+                    return;
+                }
 
-            final ServiceInfo serviceInfo = fetchServiceInfo(context, dreamService);
+                final ServiceInfo serviceInfo = fetchServiceInfo(context, dreamService);
 
-            final Intent overlayIntent = new Intent();
-            overlayIntent.setComponent(overlayService);
-            overlayIntent.putExtra(EXTRA_SHOW_COMPLICATIONS,
-                    fetchShouldShowComplications(context, serviceInfo));
+                final Intent overlayIntent = new Intent();
+                overlayIntent.setComponent(overlayService);
+                overlayIntent.putExtra(EXTRA_SHOW_COMPLICATIONS,
+                        fetchShouldShowComplications(context, serviceInfo));
 
-            context.bindService(overlayIntent,
-                    this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE);
-            mBound = true;
+                context.bindService(overlayIntent,
+                        this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE);
+                mBound = true;
+            });
         }
 
         public void unbind(Context context) {
-            if (!mBound) {
-                return;
-            }
+            mHandler.post(() -> {
+                if (!mBound) {
+                    return;
+                }
 
-            context.unbindService(this);
-            mBound = false;
+                context.unbindService(this);
+                mBound = false;
+            });
         }
 
         public void request(Consumer<IDreamOverlay> request) {
-            mRequests.push(request);
-            evaluate();
+            mHandler.post(() -> {
+                mRequests.push(request);
+                evaluate();
+            });
         }
 
         private void evaluate() {
@@ -304,15 +312,19 @@
 
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
-            // Store Overlay and execute pending requests.
-            mOverlay = IDreamOverlay.Stub.asInterface(service);
-            evaluate();
+            mHandler.post(() -> {
+                // Store Overlay and execute pending requests.
+                mOverlay = IDreamOverlay.Stub.asInterface(service);
+                evaluate();
+            });
         }
 
         @Override
         public void onServiceDisconnected(ComponentName name) {
-            // Clear Overlay binder to prevent further request processing.
-            mOverlay = null;
+            mHandler.post(() -> {
+                // Clear Overlay binder to prevent further request processing.
+                mOverlay = null;
+            });
         }
     }
 
