From 589f309909672dd0a0fe598f489f6400d889cc3f Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 29 Nov 2016 12:54:39 -0700 Subject: [PATCH] Relax missing service check for normal apps. The new missing-service behavior was mostly added for core system components, so don't wtf() when normal apps ask for missing services. Continue to emit one-line log for third-party apps so they know why getSystemService() might be returning null. Test: builds, boots Bug: 33109365 Change-Id: I3a6118a3db570d796a26da5b8d63015b13e53a87 --- .../android/app/SystemServiceRegistry.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 3ecc309d75daa..67ce3425feea7 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -514,7 +514,7 @@ final class SystemServiceRegistry { new CachedServiceFetcher() { @Override public WifiAwareManager createService(ContextImpl ctx) throws ServiceNotFoundException { - IBinder b = ServiceManager.getService(Context.WIFI_AWARE_SERVICE); + IBinder b = ServiceManager.getServiceOrThrow(Context.WIFI_AWARE_SERVICE); IWifiAwareManager service = IWifiAwareManager.Stub.asInterface(b); if (service == null) { return null; @@ -831,7 +831,7 @@ final class SystemServiceRegistry { service = createService(ctx); cache[mCacheIndex] = service; } catch (ServiceNotFoundException e) { - Log.wtf(TAG, e.getMessage(), e); + onServiceNotFound(e); } } return (T)service; @@ -849,13 +849,13 @@ final class SystemServiceRegistry { private T mCachedInstance; @Override - public final T getService(ContextImpl unused) { + public final T getService(ContextImpl ctx) { synchronized (StaticServiceFetcher.this) { if (mCachedInstance == null) { try { mCachedInstance = createService(); } catch (ServiceNotFoundException e) { - Log.wtf(TAG, e.getMessage(), e); + onServiceNotFound(e); } } return mCachedInstance; @@ -888,7 +888,7 @@ final class SystemServiceRegistry { try { mCachedInstance = createService(appContext != null ? appContext : ctx); } catch (ServiceNotFoundException e) { - Log.wtf(TAG, e.getMessage(), e); + onServiceNotFound(e); } } return mCachedInstance; @@ -897,4 +897,15 @@ final class SystemServiceRegistry { public abstract T createService(Context applicationContext) throws ServiceNotFoundException; } + + public static void onServiceNotFound(ServiceNotFoundException e) { + // We're mostly interested in tracking down long-lived core system + // components that might stumble if they obtain bad references; just + // emit a tidy log message for normal apps + if (android.os.Process.myUid() < android.os.Process.FIRST_APPLICATION_UID) { + Log.wtf(TAG, e.getMessage(), e); + } else { + Log.w(TAG, e.getMessage()); + } + } }