diff options
author | Jason Monk <jmonk@google.com> | 2014-04-23 16:39:11 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-04-23 16:39:12 +0000 |
commit | 050eaf2a87e5d78eb7500c2d84129f7a2fffa750 (patch) | |
tree | 11353dfb8b05be66adcf2e846ecab2bf25fffaf3 /src/com/android/launcher3/LauncherModel.java | |
parent | 27b4e0f7d6f6f2bfacc4e2fcc66472540122939d (diff) | |
parent | a0a7a7440e860c61c8261c5009dbe351869896b3 (diff) | |
download | android_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.java | 33 |
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); } |