Merge "Fix Settings creating too many threads unexpectedly"
This commit is contained in:
committed by
Android (Google) Code Review
commit
02bd28edbd
@@ -37,12 +37,11 @@ import com.android.settings.homepage.contextualcards.logging.ContextualCardLogUt
|
|||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.utils.AsyncLoaderCompat;
|
import com.android.settingslib.utils.AsyncLoaderCompat;
|
||||||
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@@ -56,7 +55,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
private static final String TAG = "ContextualCardLoader";
|
private static final String TAG = "ContextualCardLoader";
|
||||||
private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;
|
private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;
|
||||||
|
|
||||||
private final ExecutorService mExecutorService;
|
|
||||||
private final ContentObserver mObserver = new ContentObserver(
|
private final ContentObserver mObserver = new ContentObserver(
|
||||||
new Handler(Looper.getMainLooper())) {
|
new Handler(Looper.getMainLooper())) {
|
||||||
@Override
|
@Override
|
||||||
@@ -76,7 +74,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
ContextualCardLoader(Context context) {
|
ContextualCardLoader(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mExecutorService = Executors.newCachedThreadPool();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -163,8 +160,8 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
final List<Future<ContextualCard>> eligibleCards = new ArrayList<>();
|
final List<Future<ContextualCard>> eligibleCards = new ArrayList<>();
|
||||||
|
|
||||||
for (ContextualCard card : candidates) {
|
for (ContextualCard card : candidates) {
|
||||||
final EligibleCardChecker future = new EligibleCardChecker(mContext, card);
|
final EligibleCardChecker checker = new EligibleCardChecker(mContext, card);
|
||||||
eligibleCards.add(mExecutorService.submit(future));
|
eligibleCards.add(ThreadUtils.postOnBackgroundThread(checker));
|
||||||
}
|
}
|
||||||
// Collect future and eligible cards
|
// Collect future and eligible cards
|
||||||
for (Future<ContextualCard> cardFuture : eligibleCards) {
|
for (Future<ContextualCard> cardFuture : eligibleCards) {
|
||||||
|
@@ -23,13 +23,12 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.settings.homepage.contextualcards.ContextualCard;
|
import com.android.settings.homepage.contextualcards.ContextualCard;
|
||||||
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@@ -42,7 +41,6 @@ public class ConditionManager {
|
|||||||
|
|
||||||
private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20;
|
private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20;
|
||||||
|
|
||||||
private final ExecutorService mExecutorService;
|
|
||||||
private final Context mAppContext;
|
private final Context mAppContext;
|
||||||
private final ConditionListener mListener;
|
private final ConditionListener mListener;
|
||||||
|
|
||||||
@@ -50,7 +48,6 @@ public class ConditionManager {
|
|||||||
|
|
||||||
public ConditionManager(Context context, ConditionListener listener) {
|
public ConditionManager(Context context, ConditionListener listener) {
|
||||||
mAppContext = context.getApplicationContext();
|
mAppContext = context.getApplicationContext();
|
||||||
mExecutorService = Executors.newCachedThreadPool();
|
|
||||||
mCardControllers = new ArrayList<>();
|
mCardControllers = new ArrayList<>();
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
initCandidates();
|
initCandidates();
|
||||||
@@ -64,8 +61,8 @@ public class ConditionManager {
|
|||||||
final List<Future<ContextualCard>> displayableCards = new ArrayList<>();
|
final List<Future<ContextualCard>> displayableCards = new ArrayList<>();
|
||||||
// Check displayable future
|
// Check displayable future
|
||||||
for (ConditionalCardController card : mCardControllers) {
|
for (ConditionalCardController card : mCardControllers) {
|
||||||
final DisplayableChecker future = new DisplayableChecker(getController(card.getId()));
|
final DisplayableChecker checker = new DisplayableChecker(getController(card.getId()));
|
||||||
displayableCards.add(mExecutorService.submit(future));
|
displayableCards.add(ThreadUtils.postOnBackgroundThread(checker));
|
||||||
}
|
}
|
||||||
// Collect future and add displayable cards
|
// Collect future and add displayable cards
|
||||||
for (Future<ContextualCard> cardFuture : displayableCards) {
|
for (Future<ContextualCard> cardFuture : displayableCards) {
|
||||||
|
@@ -20,8 +20,6 @@ import static android.app.NotificationManager.IMPORTANCE_LOW;
|
|||||||
import static android.app.NotificationManager.IMPORTANCE_NONE;
|
import static android.app.NotificationManager.IMPORTANCE_NONE;
|
||||||
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
|
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
|
||||||
|
|
||||||
import static com.android.settings.notification.ChannelListPreferenceController.ARG_FROM_SETTINGS;
|
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationChannelGroup;
|
import android.app.NotificationChannelGroup;
|
||||||
@@ -62,13 +60,12 @@ import com.android.settings.slices.SliceBuilderUtils;
|
|||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||||
import com.android.settingslib.applications.ApplicationsState;
|
import com.android.settingslib.applications.ApplicationsState;
|
||||||
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@@ -135,7 +132,6 @@ public class NotificationChannelSlice implements CustomSliceable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected final Context mContext;
|
protected final Context mContext;
|
||||||
private final ExecutorService mExecutorService;
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
NotificationBackend mNotificationBackend;
|
NotificationBackend mNotificationBackend;
|
||||||
private NotificationBackend.AppRow mAppRow;
|
private NotificationBackend.AppRow mAppRow;
|
||||||
@@ -145,7 +141,6 @@ public class NotificationChannelSlice implements CustomSliceable {
|
|||||||
public NotificationChannelSlice(Context context) {
|
public NotificationChannelSlice(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mNotificationBackend = new NotificationBackend();
|
mNotificationBackend = new NotificationBackend();
|
||||||
mExecutorService = Executors.newCachedThreadPool();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -376,9 +371,9 @@ public class NotificationChannelSlice implements CustomSliceable {
|
|||||||
// Create tasks to get notification data for multi-channel packages.
|
// Create tasks to get notification data for multi-channel packages.
|
||||||
final List<Future<NotificationBackend.AppRow>> appRowTasks = new ArrayList<>();
|
final List<Future<NotificationBackend.AppRow>> appRowTasks = new ArrayList<>();
|
||||||
for (PackageInfo packageInfo : packageInfoList) {
|
for (PackageInfo packageInfo : packageInfoList) {
|
||||||
final NotificationMultiChannelAppRow future = new NotificationMultiChannelAppRow(
|
final NotificationMultiChannelAppRow appRow = new NotificationMultiChannelAppRow(
|
||||||
mContext, mNotificationBackend, packageInfo);
|
mContext, mNotificationBackend, packageInfo);
|
||||||
appRowTasks.add(mExecutorService.submit(future));
|
appRowTasks.add(ThreadUtils.postOnBackgroundThread(appRow));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the package which has sent at least ~10 notifications and not turn off channels.
|
// Get the package which has sent at least ~10 notifications and not turn off channels.
|
||||||
|
Reference in New Issue
Block a user