From a13a2f2a7bd0550d1ad973f760ff25e1a4137c43 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 23 Jul 2012 14:29:15 -0700 Subject: Fixing issue where defered unbind was running after synchronous bind. (Bug 6858398, Bug 6863181) Change-Id: I03dc3ae18528901cc88c79638a8495c1ab8d61af --- src/com/android/launcher2/DeferredHandler.java | 12 ++++++++++++ src/com/android/launcher2/LauncherModel.java | 5 +++++ 2 files changed, 17 insertions(+) (limited to 'src') diff --git a/src/com/android/launcher2/DeferredHandler.java b/src/com/android/launcher2/DeferredHandler.java index 930da56aa..b7e48b130 100644 --- a/src/com/android/launcher2/DeferredHandler.java +++ b/src/com/android/launcher2/DeferredHandler.java @@ -98,6 +98,18 @@ public class DeferredHandler { } } + /** Runs all queued Runnables from the calling thread. */ + public void flush() { + LinkedList queue = new LinkedList(); + synchronized (mQueue) { + queue.addAll(mQueue); + mQueue.clear(); + } + for (Runnable r : queue) { + r.run(); + } + } + void scheduleNextLocked() { if (mQueue.size() > 0) { Runnable peek = mQueue.getFirst(); diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index d4b7f7652..ab29fc688 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -918,6 +918,11 @@ public class LauncherModel extends BroadcastReceiver { // data structures, we can't allow any other thread to touch that data, but because // this call is synchronous, we can get away with not locking). + // The LauncherModel is static in the LauncherApplication and mHandler may have queued + // operations from the previous activity. We need to ensure that all queued operations + // are executed before any synchronous binding work is done. + mHandler.flush(); + // Divide the set of loaded items into those that we are binding synchronously, and // everything else that is to be bound normally (asynchronously). bindWorkspace(synchronousBindPage); -- cgit v1.2.3