diff options
author | 2024-10-24 10:57:47 +0000 | |
---|---|---|
committer | 2024-10-24 10:57:47 +0000 | |
commit | 661ea11e1c3a1a64a5cd4c5e70d24992e7e33afe (patch) | |
tree | 1276e225b2dd3f299494798ed9f3e27b27745b06 /packages/Shell/src | |
parent | 891599e85ff55b261fdb08051fd1dc7195f32aa2 (diff) | |
parent | 91580c0885060b9ba3091e7bd5628f7743952d45 (diff) |
Merge "Fix ANR in Process com.android.shell after BR is finished" into main
Diffstat (limited to 'packages/Shell/src')
-rw-r--r-- | packages/Shell/src/com/android/shell/BugreportProgressService.java | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index 0a68e6791df5..b4d81d6937ed 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -30,7 +30,6 @@ import android.accounts.AccountManager; import android.annotation.MainThread; import android.annotation.Nullable; import android.annotation.SuppressLint; -import android.app.ActivityThread; import android.app.AlertDialog; import android.app.Notification; import android.app.Notification.Action; @@ -117,7 +116,9 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -174,6 +175,18 @@ public class BugreportProgressService extends Service { static final String EXTRA_EXTRA_ATTACHMENT_URIS = "android.intent.extra.EXTRA_ATTACHMENT_URIS"; + private static final ThreadFactory sBugreportManagerCallbackThreadFactory = + new ThreadFactory() { + private static final ThreadFactory mFactory = Executors.defaultThreadFactory(); + + @Override + public Thread newThread(Runnable r) { + Thread thread = mFactory.newThread(r); + thread.setName("BRMgrCallbackThread"); + return thread; + } + }; + private static final int MSG_SERVICE_COMMAND = 1; private static final int MSG_DELAYED_SCREENSHOT = 2; private static final int MSG_SCREENSHOT_REQUEST = 3; @@ -277,6 +290,7 @@ public class BugreportProgressService extends Service { private boolean mIsWatch; private boolean mIsTv; + private ExecutorService mBugreportSingleThreadExecutor; @Override public void onCreate() { @@ -307,6 +321,8 @@ public class BugreportProgressService extends Service { isTv(this) ? NotificationManager.IMPORTANCE_DEFAULT : NotificationManager.IMPORTANCE_LOW)); mBugreportManager = mContext.getSystemService(BugreportManager.class); + mBugreportSingleThreadExecutor = Executors.newSingleThreadExecutor( + sBugreportManagerCallbackThreadFactory); } @Override @@ -337,6 +353,7 @@ public class BugreportProgressService extends Service { public void onDestroy() { mServiceHandler.getLooper().quit(); mScreenshotHandler.getLooper().quit(); + mBugreportSingleThreadExecutor.close(); super.onDestroy(); } @@ -714,8 +731,6 @@ public class BugreportProgressService extends Service { } } - final Executor executor = ActivityThread.currentActivityThread().getExecutor(); - Log.i(TAG, "bugreport type = " + bugreportType + " bugreport file fd: " + bugreportFd + " screenshot file fd: " + screenshotFd); @@ -724,7 +739,8 @@ public class BugreportProgressService extends Service { try { synchronized (mLock) { mBugreportManager.startBugreport(bugreportFd, screenshotFd, - new BugreportParams(bugreportType), executor, bugreportCallback); + new BugreportParams(bugreportType), mBugreportSingleThreadExecutor, + bugreportCallback); bugreportCallback.trackInfoWithIdLocked(); } } catch (RuntimeException e) { |