From dc4b80dde458ab43cc2bc8670864532023ddd6f2 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Wed, 20 Apr 2016 15:24:31 -0700 Subject: [PATCH] Removing disk access from startActivity thread Code was checking whether the directory for recent_images existed in many places unnecessarily causing StrictMode violations. Moved the code to only attempt to check and create the directory before actually writing to disk. Bug: b/28195831 Change-Id: I05f77a10f1dafc8cc0b1836b62352d56549ac1ee --- .../com/android/server/am/TaskPersister.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java index a2472ac849516..48fecd5c4714f 100644 --- a/services/core/java/com/android/server/am/TaskPersister.java +++ b/services/core/java/com/android/server/am/TaskPersister.java @@ -17,8 +17,6 @@ package com.android.server.am; import android.annotation.NonNull; -import android.annotation.Nullable; -import android.app.ActivityManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Debug; @@ -519,7 +517,7 @@ public class TaskPersister { if (DEBUG) Slog.d(TAG, "removeObsoleteFiles: persistentTaskIds=" + persistentTaskIds + " files=" + files); if (files == null) { - Slog.e(TAG, "File error accessing recents directory (too many files open?)."); + Slog.e(TAG, "File error accessing recents directory (directory doesn't exist?)."); return; } for (int fileNdx = 0; fileNdx < files.length; ++fileNdx) { @@ -597,15 +595,12 @@ public class TaskPersister { } static File getUserImagesDir(int userId) { - File userImagesDir = new File(Environment.getDataSystemCeDirectory(userId), IMAGES_DIRNAME); + return new File(Environment.getDataSystemCeDirectory(userId), IMAGES_DIRNAME); + } - if (!userImagesDir.exists()) { - if (!userImagesDir.mkdir()) { - Slog.e(TAG, "Failure creating images directory for user " + userId + ": " - + userImagesDir); - } - } - return userImagesDir; + private static boolean createParentDirectory(String filePath) { + File parentDir = new File(filePath).getParentFile(); + return parentDir.exists() || parentDir.mkdirs(); } private class LazyTaskWriterThread extends Thread { @@ -693,6 +688,10 @@ public class TaskPersister { if (item instanceof ImageWriteQueueItem) { ImageWriteQueueItem imageWriteQueueItem = (ImageWriteQueueItem) item; final String filePath = imageWriteQueueItem.mFilePath; + if (!createParentDirectory(filePath)) { + Slog.e(TAG, "Error while creating images directory for file: " + filePath); + continue; + } final Bitmap bitmap = imageWriteQueueItem.mImage; if (DEBUG) Slog.d(TAG, "writing bitmap: filename=" + filePath); FileOutputStream imageFile = null;