Skip to content

Commit d637d8f

Browse files
jiyongpthestinger
authored andcommitted
Respect threading requirement of LifeCycle#addObserver/removeObserver
Bug: N/A Test: N/A Change-Id: I7847412e0fde6db3659513b245a1cf4449737173
1 parent 3be123c commit d637d8f

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

android/TerminalApp/java/com/android/virtualization/terminal/MemBalloonController.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package com.android.virtualization.terminal
1717

1818
import android.content.Context
19+
import android.os.Handler
20+
import android.os.Looper
1921
import android.system.virtualmachine.VirtualMachine
2022
import android.util.Log
2123
import androidx.lifecycle.DefaultLifecycleObserver
@@ -36,6 +38,12 @@ class MemBalloonController(val context: Context, val vm: VirtualMachine) {
3638
private const val MAX_PERCENT = 50
3739
private const val INFLATION_STEP_PERCENT = 5
3840
private const val INFLATION_PERIOD_SEC = 60L
41+
42+
private val mainHandler = Handler(Looper.getMainLooper())
43+
44+
private fun runOnMainThread(runnable: Runnable) {
45+
mainHandler.post(runnable)
46+
}
3947
}
4048

4149
private val executor =
@@ -84,11 +92,15 @@ class MemBalloonController(val context: Context, val vm: VirtualMachine) {
8492
private var ongoingInflation: ScheduledFuture<*>? = null
8593

8694
fun start() {
87-
ProcessLifecycleOwner.get().lifecycle.addObserver(observer)
95+
// addObserver is @MainThread
96+
runOnMainThread({ ProcessLifecycleOwner.get().lifecycle.addObserver(observer) })
8897
}
8998

9099
fun stop() {
91-
ProcessLifecycleOwner.get().lifecycle.removeObserver(observer)
92-
executor.shutdown()
100+
// removeObserver is @MainThread
101+
runOnMainThread({
102+
ProcessLifecycleOwner.get().lifecycle.removeObserver(observer)
103+
executor.shutdown()
104+
})
93105
}
94106
}

0 commit comments

Comments
 (0)