From ab21b8a838b40906cad5f9eafd020b7bde7ade1c Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Tue, 29 Oct 2019 17:06:28 +0800 Subject: [PATCH] Fix Settings creating too many threads unexpectedly Provide a method to submit a Callable for execution in the shared background thread pool. Bug: 143434413 Test: manual, robotest Change-Id: I149b5926f20acd0e43c4071cc35520c6bc50efef --- .../com/android/settingslib/utils/ThreadUtils.java | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java b/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java index 4e052f1aeca4..69f1c17f97b1 100644 --- a/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java @@ -18,6 +18,7 @@ package com.android.settingslib.utils; import android.os.Handler; import android.os.Looper; +import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -64,11 +65,16 @@ public class ThreadUtils { * @Return A future of the task that can be monitored for updates or cancelled. */ public static Future postOnBackgroundThread(Runnable runnable) { - if (sThreadExecutor == null) { - sThreadExecutor = Executors.newFixedThreadPool( - Runtime.getRuntime().availableProcessors()); - } - return sThreadExecutor.submit(runnable); + return getThreadExecutor().submit(runnable); + } + + /** + * Posts callable in background using shared background thread pool. + * + * @Return A future of the task that can be monitored for updates or cancelled. + */ + public static Future postOnBackgroundThread(Callable callable) { + return getThreadExecutor().submit(callable); } /** @@ -78,4 +84,11 @@ public class ThreadUtils { getUiThreadHandler().post(runnable); } + private static synchronized ExecutorService getThreadExecutor() { + if (sThreadExecutor == null) { + sThreadExecutor = Executors.newFixedThreadPool( + Runtime.getRuntime().availableProcessors()); + } + return sThreadExecutor; + } } -- 2.11.0