Merge "Offer a NOTIFY_NO_DELAY flag for notifications." into rvc-dev

This commit is contained in:
Jeff Sharkey
2020-04-09 03:14:42 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 1 deletions

View File

@@ -686,6 +686,19 @@ public abstract class ContentResolver implements ContentInterface {
*/
public static final int NOTIFY_DELETE = 1 << 4;
/**
* Flag for {@link #notifyChange(Uri, ContentObserver, int)}: typically set
* by a {@link ContentProvider} to indicate that this notification should
* not be subject to any delays when dispatching to apps running in the
* background.
* <p>
* Using this flag may negatively impact system health and performance, and
* should be used sparingly.
*
* @hide
*/
public static final int NOTIFY_NO_DELAY = 1 << 15;
/**
* No exception, throttled by app standby normally.
* @hide

View File

@@ -569,9 +569,10 @@ public final class ContentService extends IContentService.Stub {
// Immediately dispatch notifications to foreground apps that
// are important to the user; all other background observers are
// delayed to avoid stampeding
final boolean noDelay = (key.flags & ContentResolver.NOTIFY_NO_DELAY) != 0;
final int procState = LocalServices.getService(ActivityManagerInternal.class)
.getUidProcessState(key.uid);
if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND || noDelay) {
task.run();
} else {
BackgroundThread.getHandler().postDelayed(task, BACKGROUND_OBSERVER_DELAY);