diff options
| author | 2019-10-29 17:06:28 +0800 | |
|---|---|---|
| committer | 2019-11-12 16:32:01 +0800 | |
| commit | cf1517cfccd9045d405f844bfceb0e437b65b700 (patch) | |
| tree | 751c71ded9bc7c51cda5feb5801ca660126521e1 | |
| parent | 002deeda0c7050c6d0e4d2ef63d26c6ec12d0d93 (diff) | |
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
Merged-In: I149b5926f20acd0e43c4071cc35520c6bc50efef
(cherry picked from commit ab21b8a838b40906cad5f9eafd020b7bde7ade1c)
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java | 24 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java | 2 |
2 files changed, 20 insertions, 6 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java b/packages/SettingsLib/src/com/android/settingslib/utils/ThreadUtils.java index 5c9a06f91e6a..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; @@ -26,7 +27,7 @@ public class ThreadUtils { private static volatile Thread sMainThread; private static volatile Handler sMainThreadHandler; - private static volatile ExecutorService sSingleThreadExecutor; + private static volatile ExecutorService sThreadExecutor; /** * Returns true if the current thread is the UI thread. @@ -64,10 +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 (sSingleThreadExecutor == null) { - sSingleThreadExecutor = Executors.newSingleThreadExecutor(); - } - return sSingleThreadExecutor.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); } /** @@ -77,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; + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java index 26db124c0041..5114b00d2711 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java @@ -50,7 +50,7 @@ public class ThreadUtilsTest { } @Test - public void testPostOnMainThread_shouldRunOnMainTread() { + public void testPostOnMainThread_shouldRunOnMainThread() { TestRunnable cr = new TestRunnable(); ShadowLooper.pauseMainLooper(); ThreadUtils.postOnMainThread(cr); |