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
This commit is contained in:
Danning Chen
2020-02-13 11:34:01 -08:00
parent ac21f74938
commit 94580df0a8

View File

@@ -101,8 +101,8 @@ public class DataManager {
private final SparseArray<NotificationListenerService> mNotificationListeners =
new SparseArray<>();
private final SparseArray<PackageMonitor> 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);