summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordtrainor@chromium.org <dtrainor@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-19 20:40:29 +0000
committerdtrainor@chromium.org <dtrainor@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-19 20:40:29 +0000
commit236a804d2e8ada7416abc8fb0793d60d9a394518 (patch)
tree000b4e5336fd432e7d9dc1658004ddfbe555920c
parent5a737712a73d47ebc51429b3efb73c2731da6ae3 (diff)
downloadchromium_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.java16
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();
}