Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1c11ca2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix Settings creating too many threads unexpectedly" into qt-qpr1-dev

parents 2dbc1c0d cf1517cf
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -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 getThreadExecutor().submit(runnable);
    }
        return sSingleThreadExecutor.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;
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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);