From 7cbad8a06348574ae1f3ed3d7950309e5de90f7a Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Fri, 11 Feb 2022 15:44:38 -0800 Subject: [PATCH] Cache IAlarmManager binder handle. Bug: 218909495 Test: treehugger Change-Id: Ib73dac85999311993fa9f0d552609065c24a155c --- core/java/android/os/SystemClock.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/core/java/android/os/SystemClock.java b/core/java/android/os/SystemClock.java index b9252d6438109..7379443877b70 100644 --- a/core/java/android/os/SystemClock.java +++ b/core/java/android/os/SystemClock.java @@ -104,6 +104,8 @@ import java.time.ZoneOffset; public final class SystemClock { private static final String TAG = "SystemClock"; + private static volatile IAlarmManager sIAlarmManager; + /** * This class is uninstantiable. */ @@ -151,8 +153,7 @@ public final class SystemClock { * @return if the clock was successfully set to the specified time. */ public static boolean setCurrentTimeMillis(long millis) { - final IAlarmManager mgr = IAlarmManager.Stub - .asInterface(ServiceManager.getService(Context.ALARM_SERVICE)); + final IAlarmManager mgr = getIAlarmManager(); if (mgr == null) { Slog.e(TAG, "Unable to set RTC: mgr == null"); return false; @@ -280,8 +281,7 @@ public final class SystemClock { * @hide */ public static long currentNetworkTimeMillis() { - final IAlarmManager mgr = IAlarmManager.Stub - .asInterface(ServiceManager.getService(Context.ALARM_SERVICE)); + final IAlarmManager mgr = getIAlarmManager(); if (mgr != null) { try { return mgr.currentNetworkTimeMillis(); @@ -296,6 +296,14 @@ public final class SystemClock { } } + private static IAlarmManager getIAlarmManager() { + if (sIAlarmManager == null) { + sIAlarmManager = IAlarmManager.Stub + .asInterface(ServiceManager.getService(Context.ALARM_SERVICE)); + } + return sIAlarmManager; + } + /** * Returns a {@link Clock} that starts at January 1, 1970 00:00:00.0 UTC, * synchronized using a remote network source outside the device.