diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 10 | ||||
| -rw-r--r-- | core/java/android/hardware/display/DisplayManager.java | 9 |
2 files changed, 17 insertions, 2 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 0438e77..2cdb086 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -1553,10 +1553,20 @@ public final class ActivityThread { if (dm != null && !forceUpdate) { return dm; } + + DisplayManager displayManager = DisplayManager.getInstance(); + if (displayManager == null) { + // may be null early in system startup + dm = new DisplayMetrics(); + dm.setToDefaults(); + return dm; + } + if (dm == null) { dm = new DisplayMetrics(); mDisplayMetrics.put(ci, dm); } + CompatibilityInfoHolder cih = new CompatibilityInfoHolder(); cih.set(ci); Display d = WindowManagerImpl.getDefault().makeCompatible(cih).getDefaultDisplay(); diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 640044b..dc79710 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -45,14 +45,19 @@ public final class DisplayManager { /** * Gets an instance of the display manager. - * @return The display manager instance. + * + * @return The display manager instance, may be null early in system startup + * before the display manager has been fully initialized. + * * @hide */ public static DisplayManager getInstance() { synchronized (DisplayManager.class) { if (sInstance == null) { IBinder b = ServiceManager.getService(Context.DISPLAY_SERVICE); - sInstance = new DisplayManager(IDisplayManager.Stub.asInterface(b)); + if (b != null) { + sInstance = new DisplayManager(IDisplayManager.Stub.asInterface(b)); + } } return sInstance; } |
