From 94580df0a81fd658dbd3263ec02914ad23b4d4bc Mon Sep 17 00:00:00 2001 From: Danning Chen Date: Thu, 13 Feb 2020 11:34:01 -0800 Subject: [PATCH] Move the initialization of Call/SMS/MMS content observers out of the DataManager constructor This change is to speed up the system boot time. The people service start time will be reduced from ~1.5 ms to ~0.5 ms. Bug: 149245782 Test: Manual run with System.nanoTime() logged Change-Id: I9114b3c9e3637b2498618220665cd98df1d1f994 --- .../server/people/data/DataManager.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java index 2edfd7487ec06..2d7c937975bd4 100644 --- a/services/people/java/com/android/server/people/data/DataManager.java +++ b/services/people/java/com/android/server/people/data/DataManager.java @@ -101,8 +101,8 @@ public class DataManager { private final SparseArray mNotificationListeners = new SparseArray<>(); private final SparseArray mPackageMonitors = new SparseArray<>(); - private final ContentObserver mCallLogContentObserver; - private final ContentObserver mMmsSmsContentObserver; + private ContentObserver mCallLogContentObserver; + private ContentObserver mMmsSmsContentObserver; private ShortcutServiceInternal mShortcutServiceInternal; private PackageManagerInternal mPackageManagerInternal; @@ -118,10 +118,6 @@ public class DataManager { mContext = context; mInjector = injector; mUsageStatsQueryExecutor = mInjector.createScheduledExecutor(); - mCallLogContentObserver = new CallLogContentObserver( - BackgroundThread.getHandler()); - mMmsSmsContentObserver = new MmsSmsContentObserver( - BackgroundThread.getHandler()); mDiskReadWriterExecutor = mInjector.createScheduledExecutor(); } @@ -189,9 +185,12 @@ public class DataManager { // The call log and MMS/SMS messages are shared across user profiles. So only need to // register the content observers once for the primary user. // TODO: Register observers after the conversations and events being loaded from disk. + mCallLogContentObserver = new CallLogContentObserver(BackgroundThread.getHandler()); mContext.getContentResolver().registerContentObserver( CallLog.CONTENT_URI, /* notifyForDescendants= */ true, mCallLogContentObserver, UserHandle.USER_SYSTEM); + + mMmsSmsContentObserver = new MmsSmsContentObserver(BackgroundThread.getHandler()); mContext.getContentResolver().registerContentObserver( MmsSms.CONTENT_URI, /* notifyForDescendants= */ false, mMmsSmsContentObserver, UserHandle.USER_SYSTEM); @@ -226,8 +225,14 @@ public class DataManager { mPackageMonitors.get(userId).unregister(); } if (userId == UserHandle.USER_SYSTEM) { - mContext.getContentResolver().unregisterContentObserver(mCallLogContentObserver); - mContext.getContentResolver().unregisterContentObserver(mMmsSmsContentObserver); + if (mCallLogContentObserver != null) { + mContext.getContentResolver().unregisterContentObserver(mCallLogContentObserver); + mCallLogContentObserver = null; + } + if (mMmsSmsContentObserver != null) { + mContext.getContentResolver().unregisterContentObserver(mMmsSmsContentObserver); + mCallLogContentObserver = null; + } } DataMaintenanceService.cancelJob(mContext, userId);