diff options
author | dtrainor@chromium.org <dtrainor@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-19 20:40:29 +0000 |
---|---|---|
committer | dtrainor@chromium.org <dtrainor@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-19 20:40:29 +0000 |
commit | 236a804d2e8ada7416abc8fb0793d60d9a394518 (patch) | |
tree | 000b4e5336fd432e7d9dc1658004ddfbe555920c | |
parent | 5a737712a73d47ebc51429b3efb73c2731da6ae3 (diff) | |
download | chromium_src-236a804d2e8ada7416abc8fb0793d60d9a394518.zip chromium_src-236a804d2e8ada7416abc8fb0793d60d9a394518.tar.gz chromium_src-236a804d2e8ada7416abc8fb0793d60d9a394518.tar.bz2 |
Merge 290379 "[Android] Make ApplicationStatus thread safe"
> [Android] Make ApplicationStatus thread safe
>
> - Make sActivityInfo a ConcurrentHashMap instead of just a HashMap.
>
> BUG=403951
>
> Review URL: https://codereview.chromium.org/479603003
TBR=dtrainor@chromium.org
Review URL: https://codereview.chromium.org/490703002
git-svn-id: svn://svn.chromium.org/chrome/branches/2062/src@290658 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/android/java/src/org/chromium/base/ApplicationStatus.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/base/android/java/src/org/chromium/base/ApplicationStatus.java b/base/android/java/src/org/chromium/base/ApplicationStatus.java index d681600..954415d 100644 --- a/base/android/java/src/org/chromium/base/ApplicationStatus.java +++ b/base/android/java/src/org/chromium/base/ApplicationStatus.java @@ -12,9 +12,9 @@ import android.os.Bundle; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Provides information about the current activity's status, and a way @@ -51,6 +51,7 @@ public class ApplicationStatus { private static Application sApplication; + private static Object sCachedApplicationStateLock = new Object(); private static Integer sCachedApplicationState; /** Last activity that was shown (or null if none or it was destroyed). */ @@ -63,7 +64,7 @@ public class ApplicationStatus { * A map of which observers listen to state changes from which {@link Activity}. */ private static final Map<Activity, ActivityInfo> sActivityInfo = - new HashMap<Activity, ActivityInfo>(); + new ConcurrentHashMap<Activity, ActivityInfo>(); /** * A list of observers to be notified when any {@link Activity} has a state change. @@ -187,7 +188,9 @@ public class ApplicationStatus { } // Invalidate the cached application state. - sCachedApplicationState = null; + synchronized (sCachedApplicationStateLock) { + sCachedApplicationState = null; + } ActivityInfo info = sActivityInfo.get(activity); info.setStatus(newState); @@ -235,7 +238,6 @@ public class ApplicationStatus { * @return A {@link List} of all non-destroyed {@link Activity}s. */ public static List<WeakReference<Activity>> getRunningActivities() { - ThreadUtils.assertOnUiThread(); List<WeakReference<Activity>> activities = new ArrayList<WeakReference<Activity>>(); for (Activity activity : sActivityInfo.keySet()) { activities.add(new WeakReference<Activity>(activity)); @@ -302,7 +304,11 @@ public class ApplicationStatus { * @return The state of the application (see {@link ApplicationState}). */ public static int getStateForApplication() { - if (sCachedApplicationState == null) sCachedApplicationState = determineApplicationState(); + synchronized (sCachedApplicationStateLock) { + if (sCachedApplicationState == null) { + sCachedApplicationState = determineApplicationState(); + } + } return sCachedApplicationState.intValue(); } |