diff --git a/api/test-current.txt b/api/test-current.txt
index e9615111..afced53 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -661,6 +661,7 @@
     method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions);
     field public static final String BUGREPORT_SERVICE = "bugreport";
     field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture";
+    field public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";
     field public static final String PERMISSION_SERVICE = "permission";
     field public static final String ROLLBACK_SERVICE = "rollback";
     field public static final String STATUS_BAR_SERVICE = "statusbar";
diff --git a/config/preloaded-classes b/config/preloaded-classes
index ea50999..778a4d7 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -200,6 +200,7 @@
 android.app.ContextImpl$1
 android.app.ContextImpl$ApplicationContentResolver
 android.app.ContextImpl
+android.app.DeviceIdleFrameworkInitializer
 android.app.DexLoadReporter
 android.app.Dialog$ListenersHandler
 android.app.Dialog
diff --git a/config/preloaded-classes-extra b/config/preloaded-classes-extra
index 94849fb..4bfa873 100644
--- a/config/preloaded-classes-extra
+++ b/config/preloaded-classes-extra
@@ -1,5 +1,6 @@
 # JobSchedulerFrameworkInitializer must always be preloaded because it registers the job scheduler
 # service wrapper to SystemServiceRegistry.
+android.app.DeviceIdleFrameworkInitializer
 android.app.job.JobSchedulerFrameworkInitializer
 android.icu.impl.coll.CollationRoot
 android.icu.impl.IDNA2003
diff --git a/core/java/android/app/DeviceIdleFrameworkInitializer.java b/core/java/android/app/DeviceIdleFrameworkInitializer.java
new file mode 100644
index 0000000..b304afb
--- /dev/null
+++ b/core/java/android/app/DeviceIdleFrameworkInitializer.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import android.content.Context;
+import android.os.DeviceIdleManager;
+import android.os.IDeviceIdleController;
+
+/**
+ * This class needs to be pre-loaded by zygote.  This is where the device idle manager wrapper
+ * is registered.
+ *
+ * @hide
+ */
+public class DeviceIdleFrameworkInitializer {
+    static {
+        SystemServiceRegistry.registerCachedService(
+                Context.DEVICE_IDLE_CONTROLLER, DeviceIdleManager.class,
+                (context, b) -> new DeviceIdleManager(
+                        context.getOuterContext(), IDeviceIdleController.Stub.asInterface(b)));
+    }
+}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index c58972e..b8a2fd7 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -128,12 +128,10 @@
 import android.os.BatteryStats;
 import android.os.BugreportManager;
 import android.os.Build;
-import android.os.DeviceIdleManager;
 import android.os.DropBoxManager;
 import android.os.HardwarePropertiesManager;
 import android.os.IBatteryPropertiesRegistrar;
 import android.os.IBinder;
-import android.os.IDeviceIdleController;
 import android.os.IDumpstate;
 import android.os.IHardwarePropertiesManager;
 import android.os.IPowerManager;
@@ -196,6 +194,7 @@
 import com.android.internal.policy.PhoneLayoutInflater;
 
 import java.util.Map;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 
 /**
@@ -1221,17 +1220,6 @@
                     }
             });
 
-        registerService(Context.DEVICE_IDLE_CONTROLLER, DeviceIdleManager.class,
-                new CachedServiceFetcher<DeviceIdleManager>() {
-                    @Override
-                    public DeviceIdleManager createService(ContextImpl ctx)
-                            throws ServiceNotFoundException {
-                        IDeviceIdleController service = IDeviceIdleController.Stub.asInterface(
-                                ServiceManager.getServiceOrThrow(
-                                        Context.DEVICE_IDLE_CONTROLLER));
-                        return new DeviceIdleManager(ctx.getOuterContext(), service);
-                    }});
-
         registerService(Context.TIME_DETECTOR_SERVICE, TimeDetector.class,
                 new CachedServiceFetcher<TimeDetector>() {
                     @Override
@@ -1332,9 +1320,9 @@
      *
      * @hide
      */
-    public static <T> void registerStaticService(String serviceName, Class<T> serviceClass,
+    public static <T> void registerStaticService(String serviceName, Class<T> serviceWrapperClass,
             Function<IBinder, T> serviceFetcher) {
-        registerService(serviceName, serviceClass,
+        registerService(serviceName, serviceWrapperClass,
                 new StaticServiceFetcher<T>() {
                     @Override
                     public T createService() throws ServiceNotFoundException {
@@ -1344,6 +1332,22 @@
     }
 
     /**
+     * APEX modules will use it to register their service wrapper.
+     *
+     * @hide
+     */
+    public static <T> void registerCachedService(String serviceName, Class<T> serviceWrapperClass,
+            BiFunction<ContextImpl, IBinder, T> serviceFetcher) {
+        registerService(serviceName, serviceWrapperClass,
+                new CachedServiceFetcher<T>() {
+                    @Override
+                    public T createService(ContextImpl ctx) throws ServiceNotFoundException {
+                        IBinder b = ServiceManager.getServiceOrThrow(serviceName);
+                        return serviceFetcher.apply(ctx, b);
+                    }});
+    }
+
+    /**
      * Base interface for classes that fetch services.
      * These objects must only be created during static initialization.
      */
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 73bc908..14bc757 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -4177,6 +4177,7 @@
      * @see #getSystemService(String)
      * @hide
      */
+    @TestApi
     public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";
 
     /**
