Release screenshot WindowContext when process ends
Bug: 176600157 Fix: 176600157 Test: manual -- reproducible by taking a screenshot several times (5-10) in quick succession, and observing crash in logs. Crash no longer occurs when we release the WindowContext when the screenshot process is destroyed. Change-Id: I33047ffb03867f65b591a1b43f6a56d49093fc0e
This commit is contained in:
@@ -38,6 +38,7 @@ import android.app.ActivityOptions;
|
||||
import android.app.ExitTransitionCoordinator;
|
||||
import android.app.ExitTransitionCoordinator.ExitTransitionCallbacks;
|
||||
import android.app.Notification;
|
||||
import android.app.WindowContext;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
@@ -165,7 +166,7 @@ public class ScreenshotController {
|
||||
// From WizardManagerHelper.java
|
||||
private static final String SETTINGS_SECURE_USER_SETUP_COMPLETE = "user_setup_complete";
|
||||
|
||||
private final Context mContext;
|
||||
private final WindowContext mContext;
|
||||
private final ScreenshotNotificationsController mNotificationsController;
|
||||
private final ScreenshotSmartActions mScreenshotSmartActions;
|
||||
private final UiEventLogger mUiEventLogger;
|
||||
@@ -240,7 +241,7 @@ public class ScreenshotController {
|
||||
final DisplayManager dm = requireNonNull(context.getSystemService(DisplayManager.class));
|
||||
final Display display = dm.getDisplay(DEFAULT_DISPLAY);
|
||||
final Context displayContext = context.createDisplayContext(display);
|
||||
mContext = displayContext.createWindowContext(TYPE_SCREENSHOT, null);
|
||||
mContext = (WindowContext) displayContext.createWindowContext(TYPE_SCREENSHOT, null);
|
||||
mWindowManager = mContext.getSystemService(WindowManager.class);
|
||||
|
||||
mAccessibilityManager = AccessibilityManager.getInstance(mContext);
|
||||
@@ -351,6 +352,13 @@ public class ScreenshotController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Release the constructed window context.
|
||||
*/
|
||||
void releaseContext() {
|
||||
mContext.release();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update resources on configuration change. Reinflate for theme/color changes.
|
||||
*/
|
||||
|
||||
@@ -123,6 +123,9 @@ public class TakeScreenshotService extends Service {
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (mScreenshot != null) {
|
||||
mScreenshot.releaseContext();
|
||||
}
|
||||
if (DEBUG_SERVICE) {
|
||||
Log.d(TAG, "onDestroy");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user