summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherModel.java
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2014-04-23 16:39:11 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-04-23 16:39:12 +0000
commit050eaf2a87e5d78eb7500c2d84129f7a2fffa750 (patch)
tree11353dfb8b05be66adcf2e846ecab2bf25fffaf3 /src/com/android/launcher3/LauncherModel.java
parent27b4e0f7d6f6f2bfacc4e2fcc66472540122939d (diff)
parenta0a7a7440e860c61c8261c5009dbe351869896b3 (diff)
downloadandroid_packages_apps_Trebuchet-050eaf2a87e5d78eb7500c2d84129f7a2fffa750.tar.gz
android_packages_apps_Trebuchet-050eaf2a87e5d78eb7500c2d84129f7a2fffa750.tar.bz2
android_packages_apps_Trebuchet-050eaf2a87e5d78eb7500c2d84129f7a2fffa750.zip
Merge "Add synchronization to DeferredBindRunnables" into ub-now-nova
Diffstat (limited to 'src/com/android/launcher3/LauncherModel.java')
-rw-r--r--src/com/android/launcher3/LauncherModel.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index bedd44041..044ddbb44 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -499,7 +499,9 @@ public class LauncherModel extends BroadcastReceiver {
}
// Clear any deferred bind runnables
- mDeferredBindRunnables.clear();
+ synchronized (mDeferredBindRunnables) {
+ mDeferredBindRunnables.clear();
+ }
// Remove any queued bind runnables
mHandler.cancelAllRunnablesOfType(MAIN_THREAD_BINDING_RUNNABLE);
// Unbind all the workspace items
@@ -1316,7 +1318,9 @@ public class LauncherModel extends BroadcastReceiver {
// Clear any deferred bind-runnables from the synchronized load process
// We must do this before any loading/binding is scheduled below.
- mDeferredBindRunnables.clear();
+ synchronized (mDeferredBindRunnables) {
+ mDeferredBindRunnables.clear();
+ }
// Don't bother to start the thread if we know it's not going to do anything
if (mCallbacks != null && mCallbacks.get() != null) {
@@ -1338,10 +1342,15 @@ public class LauncherModel extends BroadcastReceiver {
void bindRemainingSynchronousPages() {
// Post the remaining side pages to be loaded
if (!mDeferredBindRunnables.isEmpty()) {
- for (final Runnable r : mDeferredBindRunnables) {
+ Runnable[] deferredBindRunnables = null;
+ synchronized (mDeferredBindRunnables) {
+ deferredBindRunnables = mDeferredBindRunnables.toArray(
+ new Runnable[mDeferredBindRunnables.size()]);
+ mDeferredBindRunnables.clear();
+ }
+ for (final Runnable r : deferredBindRunnables) {
mHandler.post(r, MAIN_THREAD_BINDING_RUNNABLE);
}
- mDeferredBindRunnables.clear();
}
}
@@ -2368,7 +2377,9 @@ public class LauncherModel extends BroadcastReceiver {
}
};
if (postOnMainThread) {
- deferredBindRunnables.add(r);
+ synchronized (deferredBindRunnables) {
+ deferredBindRunnables.add(r);
+ }
} else {
runOnMainThread(r, MAIN_THREAD_BINDING_RUNNABLE);
}
@@ -2385,7 +2396,9 @@ public class LauncherModel extends BroadcastReceiver {
}
};
if (postOnMainThread) {
- deferredBindRunnables.add(r);
+ synchronized (deferredBindRunnables) {
+ deferredBindRunnables.add(r);
+ }
} else {
runOnMainThread(r, MAIN_THREAD_BINDING_RUNNABLE);
}
@@ -2507,7 +2520,9 @@ public class LauncherModel extends BroadcastReceiver {
// Load all the remaining pages (if we are loading synchronously, we want to defer this
// work until after the first render)
- mDeferredBindRunnables.clear();
+ synchronized (mDeferredBindRunnables) {
+ mDeferredBindRunnables.clear();
+ }
bindWorkspaceItems(oldCallbacks, otherWorkspaceItems, otherAppWidgets, otherFolders,
(isLoadingSynchronously ? mDeferredBindRunnables : null));
@@ -2529,7 +2544,9 @@ public class LauncherModel extends BroadcastReceiver {
}
};
if (isLoadingSynchronously) {
- mDeferredBindRunnables.add(r);
+ synchronized (mDeferredBindRunnables) {
+ mDeferredBindRunnables.add(r);
+ }
} else {
runOnMainThread(r, MAIN_THREAD_BINDING_RUNNABLE);
}