Respect threading requirement of LifeCycle#addObserver/removeObserver am: f2e4fe45f5

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/3538988

Change-Id: Ibc435d4b17628264a95cbc4da1cc8c4c4ffe971d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MemBalloonController.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MemBalloonController.kt
index e2f9add..7647d9b 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MemBalloonController.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MemBalloonController.kt
@@ -16,6 +16,8 @@
 package com.android.virtualization.terminal
 
 import android.content.Context
+import android.os.Handler
+import android.os.Looper
 import android.system.virtualmachine.VirtualMachine
 import android.util.Log
 import androidx.lifecycle.DefaultLifecycleObserver
@@ -36,6 +38,12 @@
         private const val MAX_PERCENT = 50
         private const val INFLATION_STEP_PERCENT = 5
         private const val INFLATION_PERIOD_SEC = 60L
+
+        private val mainHandler = Handler(Looper.getMainLooper())
+
+        private fun runOnMainThread(runnable: Runnable) {
+            mainHandler.post(runnable)
+        }
     }
 
     private val executor =
@@ -84,11 +92,15 @@
     private var ongoingInflation: ScheduledFuture<*>? = null
 
     fun start() {
-        ProcessLifecycleOwner.get().lifecycle.addObserver(observer)
+        // addObserver is @MainThread
+        runOnMainThread({ ProcessLifecycleOwner.get().lifecycle.addObserver(observer) })
     }
 
     fun stop() {
-        ProcessLifecycleOwner.get().lifecycle.removeObserver(observer)
-        executor.shutdown()
+        // removeObserver is @MainThread
+        runOnMainThread({
+            ProcessLifecycleOwner.get().lifecycle.removeObserver(observer)
+            executor.shutdown()
+        })
     }
 }