diff options
author | Jeff Brown <jeffbrown@google.com> | 2012-09-09 00:57:09 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2012-09-09 01:05:38 -0700 |
commit | a3909a93958676d341424d574752bc7b3280d421 (patch) | |
tree | e290a8be72c911a95a70355c7250325ef8006ab8 /core/java/android/app/ActivityThread.java | |
parent | e168edb5ced3e2659fe722c08e702a977a2ad78e (diff) | |
download | frameworks_base-a3909a93958676d341424d574752bc7b3280d421.zip frameworks_base-a3909a93958676d341424d574752bc7b3280d421.tar.gz frameworks_base-a3909a93958676d341424d574752bc7b3280d421.tar.bz2 |
Work around crash when display is removed.
After a display is removed, there may be a brief time
when a Context still exists that is bound to it.
We need to provide metrics in this case.
Bug: 7131637
Change-Id: I11b264a000653adbf0f3da399eaab66c4b40fb2a
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
-rw-r--r-- | core/java/android/app/ActivityThread.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 97dcec0..38e6970 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -1586,7 +1586,15 @@ public final class ActivityThread { CompatibilityInfoHolder cih = new CompatibilityInfoHolder(); cih.set(ci); Display d = displayManager.getCompatibleDisplay(displayId, cih); - d.getMetrics(dm); + if (d != null) { + d.getMetrics(dm); + } else { + // Display no longer exists + // FIXME: This would not be a problem if we kept the Display object around + // instead of using the raw display id everywhere. The Display object caches + // its information even after the display has been removed. + dm.setToDefaults(); + } //Slog.i("foo", "New metrics: w=" + metrics.widthPixels + " h=" // + metrics.heightPixels + " den=" + metrics.density // + " xdpi=" + metrics.xdpi + " ydpi=" + metrics.ydpi); |