Use bg thread for BroadcastDispatcher registering
There is no need for the broadcastdispatcher to register in the main thread. Moving to the bg thread reduces the chance of our main thread being busy when many classes subscribe in a short period of time. Test: manual (logs show BroadcastDispatcher is receiving broadcasts) Test: atest UserBroadcastDispatcherTest Fixes: 151684085 Change-Id: Iac6fd9e3b9f7bed3879620b4f262cc68f8ffdcd3
This commit is contained in:
@@ -166,7 +166,7 @@ open class BroadcastDispatcher @Inject constructor (
|
||||
|
||||
@VisibleForTesting
|
||||
protected open fun createUBRForUser(userId: Int) =
|
||||
UserBroadcastDispatcher(context, userId, mainHandler, bgLooper)
|
||||
UserBroadcastDispatcher(context, userId, bgLooper)
|
||||
|
||||
override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
|
||||
pw.println("Broadcast dispatcher:")
|
||||
|
||||
@@ -27,7 +27,6 @@ import android.os.UserHandle
|
||||
import android.util.ArrayMap
|
||||
import android.util.ArraySet
|
||||
import android.util.Log
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import com.android.internal.util.Preconditions
|
||||
import com.android.systemui.Dumpable
|
||||
@@ -46,11 +45,13 @@ private const val DEBUG = false
|
||||
*
|
||||
* Created by [BroadcastDispatcher] as needed by users. The value of [userId] can be
|
||||
* [UserHandle.USER_ALL].
|
||||
*
|
||||
* Each instance of this class will register itself exactly once with [Context]. Updates to the
|
||||
* [IntentFilter] will be done in the background thread.
|
||||
*/
|
||||
class UserBroadcastDispatcher(
|
||||
private val context: Context,
|
||||
private val userId: Int,
|
||||
private val mainHandler: Handler,
|
||||
private val bgLooper: Looper
|
||||
) : BroadcastReceiver(), Dumpable {
|
||||
|
||||
@@ -168,7 +169,7 @@ class UserBroadcastDispatcher(
|
||||
// Only call this from a BG thread
|
||||
private fun createFilterAndRegisterReceiverBG() {
|
||||
val intentFilter = createFilter()
|
||||
mainHandler.post(RegisterReceiverRunnable(intentFilter))
|
||||
bgHandler.post(RegisterReceiverRunnable(intentFilter))
|
||||
}
|
||||
|
||||
override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
|
||||
@@ -207,10 +208,7 @@ class UserBroadcastDispatcher(
|
||||
|
||||
/*
|
||||
* Registers and unregisters the BroadcastReceiver
|
||||
*
|
||||
* Must be called from Main Thread
|
||||
*/
|
||||
@MainThread
|
||||
override fun run() {
|
||||
if (registered.get()) {
|
||||
context.unregisterReceiver(this@UserBroadcastDispatcher)
|
||||
|
||||
@@ -91,7 +91,7 @@ class UserBroadcastDispatcherTest : SysuiTestCase() {
|
||||
fakeExecutor = FakeExecutor(FakeSystemClock())
|
||||
|
||||
userBroadcastDispatcher = UserBroadcastDispatcher(
|
||||
mockContext, USER_ID, handler, testableLooper.looper)
|
||||
mockContext, USER_ID, testableLooper.looper)
|
||||
userBroadcastDispatcher.pendingResult = mPendingResult
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user