Merge "[Launcher Jank] Avoid SimpleBroadcastReceiver making binder calls on main thread" into main

This commit is contained in:
Fengjiang Li
2024-06-24 21:00:41 +00:00
committed by Android (Google) Code Review
13 changed files with 106 additions and 49 deletions

View File

@@ -205,6 +205,7 @@ public class QuickstepModelDelegate extends ModelDelegate {
mActive = true;
}
@WorkerThread
@Override
public void workspaceLoadComplete() {
super.workspaceLoadComplete();
@@ -323,6 +324,7 @@ public class QuickstepModelDelegate extends ModelDelegate {
}
}
@WorkerThread
@Override
public void destroy() {
super.destroy();

View File

@@ -111,6 +111,7 @@ public final class WellbeingModel implements SafeCloseable {
mWorkerHandler.post(this::initializeInBackground);
}
@WorkerThread
private void initializeInBackground() {
if (!TextUtils.isEmpty(mWellbeingProviderPkg)) {
mContext.registerReceiver(
@@ -134,8 +135,8 @@ public final class WellbeingModel implements SafeCloseable {
public void close() {
if (!TextUtils.isEmpty(mWellbeingProviderPkg)) {
mWorkerHandler.post(() -> {
mWellbeingAppChangeReceiver.unregisterReceiverSafely(mContext);
mAppAddRemoveReceiver.unregisterReceiverSafely(mContext);
mWellbeingAppChangeReceiver.unregisterReceiverSafelySync(mContext);
mAppAddRemoveReceiver.unregisterReceiverSafelySync(mContext);
mContext.getContentResolver().unregisterContentObserver(mContentObserver);
});
}

View File

@@ -304,7 +304,7 @@ public class TaskbarManager {
.register(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener);
Log.d(TASKBAR_NOT_DESTROYED_TAG, "registering component callbacks from constructor.");
mContext.registerComponentCallbacks(mComponentCallbacks);
mShutdownReceiver.register(mContext, Intent.ACTION_SHUTDOWN);
mShutdownReceiver.registerAsync(mContext, Intent.ACTION_SHUTDOWN);
UI_HELPER_EXECUTOR.execute(() -> {
mSharedState.taskbarSystemActionPendingIntent = PendingIntent.getBroadcast(
mContext,
@@ -582,8 +582,7 @@ public class TaskbarManager {
public void destroy() {
debugWhyTaskbarNotDestroyed("TaskbarManager#destroy()");
removeActivityCallbacksAndListeners();
UI_HELPER_EXECUTOR.execute(
() -> mTaskbarBroadcastReceiver.unregisterReceiverSafely(mContext));
mTaskbarBroadcastReceiver.unregisterReceiverSafelyAsync(mContext);
destroyExistingTaskbar();
removeTaskbarRootViewFromWindow();
if (mUserUnlocked) {
@@ -595,7 +594,7 @@ public class TaskbarManager {
.unregister(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener);
Log.d(TASKBAR_NOT_DESTROYED_TAG, "unregistering component callbacks from destroy().");
mContext.unregisterComponentCallbacks(mComponentCallbacks);
mContext.unregisterReceiver(mShutdownReceiver);
mShutdownReceiver.unregisterReceiverSafelyAsync(mContext);
}
public @Nullable TaskbarActivityContext getCurrentActivityContext() {

View File

@@ -36,6 +36,7 @@ import android.util.SparseIntArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import com.android.launcher3.R;
import com.android.launcher3.util.SimpleBroadcastReceiver;
@@ -101,7 +102,7 @@ public final class OverviewComponentObserver {
mConfigChangesMap.append(fallbackComponent.hashCode(), fallbackInfo.configChanges);
} catch (PackageManager.NameNotFoundException ignored) { /* Impossible */ }
mUserPreferenceChangeReceiver.register(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED);
mUserPreferenceChangeReceiver.registerAsync(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED);
updateOverviewTargets();
}
@@ -114,6 +115,8 @@ public final class OverviewComponentObserver {
mOverviewChangeListener = overviewChangeListener;
}
/** Called on {@link TouchInteractionService#onSystemUiFlagsChanged} */
@UiThread
public void onSystemUiStateChanged() {
if (mDeviceState.isHomeDisabled() != mIsHomeDisabled) {
updateOverviewTargets();
@@ -128,6 +131,7 @@ public final class OverviewComponentObserver {
* Update overview intent and {@link BaseActivityInterface} based off the current launcher home
* component.
*/
@UiThread
private void updateOverviewTargets() {
ComponentName defaultHome = PackageManagerWrapper.getInstance()
.getHomeActivities(new ArrayList<>());
@@ -187,8 +191,9 @@ public final class OverviewComponentObserver {
unregisterOtherHomeAppUpdateReceiver();
mUpdateRegisteredPackage = defaultHome.getPackageName();
mOtherHomeAppUpdateReceiver.registerPkgActions(mContext, mUpdateRegisteredPackage,
ACTION_PACKAGE_ADDED, ACTION_PACKAGE_CHANGED, ACTION_PACKAGE_REMOVED);
mOtherHomeAppUpdateReceiver.registerPkgActionsAsync(
mContext, mUpdateRegisteredPackage, ACTION_PACKAGE_ADDED,
ACTION_PACKAGE_CHANGED, ACTION_PACKAGE_REMOVED);
}
}
mOverviewChangeListener.accept(mIsHomeAndOverviewSame);
@@ -198,13 +203,13 @@ public final class OverviewComponentObserver {
* Clean up any registered receivers.
*/
public void onDestroy() {
mContext.unregisterReceiver(mUserPreferenceChangeReceiver);
mUserPreferenceChangeReceiver.unregisterReceiverSafelyAsync(mContext);
unregisterOtherHomeAppUpdateReceiver();
}
private void unregisterOtherHomeAppUpdateReceiver() {
if (mUpdateRegisteredPackage != null) {
mContext.unregisterReceiver(mOtherHomeAppUpdateReceiver);
mOtherHomeAppUpdateReceiver.unregisterReceiverSafelyAsync(mContext);
mUpdateRegisteredPackage = null;
}
}

View File

@@ -18,8 +18,6 @@ package com.android.quickstep.util;
import static android.content.Intent.ACTION_TIMEZONE_CHANGED;
import static android.content.Intent.ACTION_TIME_CHANGED;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -64,9 +62,7 @@ public class AsyncClockEventDelegate extends ClockEventDelegate
private AsyncClockEventDelegate(Context context) {
super(context);
mContext = context;
UI_HELPER_EXECUTOR.execute(() ->
mReceiver.register(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED));
mReceiver.registerAsync(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED);
}
@Override
@@ -127,6 +123,6 @@ public class AsyncClockEventDelegate extends ClockEventDelegate
public void close() {
mDestroyed = true;
SettingsCache.INSTANCE.get(mContext).unregister(mFormatUri, this);
UI_HELPER_EXECUTOR.execute(() -> mReceiver.unregisterReceiverSafely(mContext));
mReceiver.unregisterReceiverSafelyAsync(mContext);
}
}